mvn Caused by: java.lang.NoClassDefFoundError: org/sonatype/aether/version/Versi

本文介绍了解决mvn dependency:tree命令中出现的NoClassDefFoundError错误的方法。该错误通常由于缺少必要的依赖导致。文章建议升级到maven-dependency-plugin 2.8版本以解决此问题。

mvn dependency:tree 报了这么个错:

 

写道
import: Entry[import from realm ClassRealm[maven.api, parent: null]]

-----------------------------------------------------

at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:168)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
... 20 more
Caused by: org.apache.maven.plugin.PluginContainerException: A required class was missing while executing org.apache.maven.plugins:maven-dependency-plugin:2.6:tree: org/sonatype/aether/version/VersionConstraint

at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:166)
... 21 more
Caused by: java.lang.NoClassDefFoundError: org/sonatype/aether/version/VersionConstraint
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
at java.lang.Class.getDeclaredMethods(Class.java:1808)
at com.google.inject.spi.InjectionPoint.getInjectionPoints(InjectionPoint.java:688)
at com.google.inject.spi.InjectionPoint.forInstanceMethodsAndFields(InjectionPoint.java:380)
at com.google.inject.internal.ConstructorBindingImpl.getInternalDependencies(ConstructorBindingImpl.java:164)
at com.google.inject.internal.InjectorImpl.getInternalDependencies(InjectorImpl.java:613)
at com.google.inject.internal.InjectorImpl.cleanup(InjectorImpl.java:569)
at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:555)
at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:884)
at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805)
at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282)
at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214)
at com.google.inject.internal.InjectorImpl.getProviderOrThrow(InjectorImpl.java:1006)
at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1038)
at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1001)
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051)
at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81)
at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:53)
at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:65)
at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:115)
at org.eclipse.sisu.bean.BeanScheduler$Activator.onProvision(BeanScheduler.java:176)
at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:126)
at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68)
at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:63)
at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:45)
at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016)
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012)
at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:81)
at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51)
at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:263)
at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:243)
at org.apache.maven.shared.dependency.graph.internal.DefaultDependencyGraphBuilder.buildDependencyGraph(DefaultDependencyGraphBuilder.java:60)
at org.apache.maven.plugin.dependency.TreeMojo.execute(TreeMojo.java:202)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
... 21 more
Caused by: java.lang.ClassNotFoundException: org.sonatype.aether.version.VersionConstraint
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
... 63 more

 

查询:

Caused by: java.lang.NoClassDefFoundError: org/sonatype/aether/version/VersionConstraint 

 

根据:https://cwiki.apache.org/confluence/display/MAVEN/AetherClassNotFound

https://issues.apache.org/jira/browse/MDEP-407的说明:maven-dependency-plugin2.8以后的版本已经修复了这个问题,所以

使用:

mvn  org.apache.maven.plugins:maven-dependency-plugin:2.8:tree -X

 

就确实没有这个问题了。

 

这个异常: ``` Caused by: java.lang.NoClassDefFoundError: org/jsoup/nodes/Node ``` 表示你的程序在运行时 **找不到 `org.jsoup.nodes.Node` 这个类**,尽管编译时是存在的。这是典型的 **依赖缺失问题**。 --- ## 🔍 问题分析 - `jsoup` 是一个用于解析 HTML 的 Java 库。 - `org.jsoup.nodes.Node` 是 jsoup 核心包中的基础类。 - 出现 `NoClassDefFoundError` 意味着:**JVM 在启动或执行过程中无法加载该类**,通常是因为 **运行时 classpath 中缺少对应的 jar 包**。 --- ## ✅ 解决方案 ### ✅ 方案一:添加 Jsoup 依赖(推荐) 根据你使用的构建工具,添加 `jsoup` 依赖。 #### 如果使用 **Maven** 在 `pom.xml` 中加入: ```xml <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.17.2</version> <!-- 推荐最新稳定版 --> </dependency> ``` 然后执行: ```bash mvn clean compile mvn dependency:copy-dependencies ``` 确保 jar 被正确打包进项目。 --- #### 如果使用 **Gradle** 在 `build.gradle` 中添加: ```groovy implementation 'org.jsoup:jsoup:1.17.2' ``` 然后同步项目。 --- ### ✅ 方案二:手动下载并添加 JAR 到类路径(不推荐,仅临时用) 如果你不用构建工具(如直接 `javac` + `java`): 1. 访问 [https://jsoup.org/download](https://jsoup.org/download) 2. 下载 `jsoup-1.17.2.jar` 3. 将其放入项目目录,例如 `lib/jsoup-1.17.2.jar` 4. 编译和运行时显式指定 classpath: ```bash javac -cp ".;lib/jsoup-1.17.2.jar" YourClass.java java -cp ".;lib/jsoup-1.17.2.jar" YourClass ``` > ⚠️ 注意:Windows 使用分号 `;`,Linux/Mac 使用冒号 `:` --- ### ✅ 方案三:确保 Jar 被正确打包进最终的 Fat Jar / WAR 如果你打成了 `jar` 包并运行时报错: ```bash java -jar your-app.jar ``` 但提示 `NoClassDefFoundError`,说明依赖没有被打进去。 #### 解决方法:使用 Maven Shade Plugin 打成可执行 Fat Jar 在 `pom.xml` 中添加插件: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.yourcompany.MainClass</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` 然后构建: ```bash mvn clean package ``` 生成的 `target/your-app-1.0-SNAPSHOT.jar` 就包含了所有依赖(包括 jsoup),可以独立运行。 --- ## 🛠 常见排查步骤 | 步骤 | 操作 | |------|------| | 1 | 查看完整堆栈,确认哪一行代码触发了该错误 | | 2 | 检查 `pom.xml` 是否真的添加了 jsoup 依赖 | | 3 | 执行 `mvn dependency:tree` 查看是否成功引入 | ```bash mvn dependency:tree | grep jsoup ``` 输出应类似: ``` \[INFO] +- org.jsoup:jsoup:jar:1.17.2:compile ``` | 4 | 检查最终 jar 包中是否有 jsoup 类文件 | ```bash jar -tf target/your-app.jar | grep "org/jsoup/nodes/Node.class" ``` 如果没有输出,说明没打进包。 | 5 | 确保 IDE 没有缓存旧类路径(IntelliJ: File → Invalidate Caches) | --- ## 💡 示例:正确使用 Jsoup 的代码 ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class HtmlParser { public static void main(String[] args) { try { Document doc = Jsoup.connect("https://example.com").get(); System.out.println(doc.title()); } catch (Exception e) { e.printStackTrace(); } } } ``` 只要依赖正确,就不会报 `NoClassDefFoundError`。 --- ## ❗ 特别注意 - `NoClassDefFoundError` ≠ `ClassNotFoundException` - `NoClassDefFoundError`:类曾经存在但初始化失败(如静态块出错)或运行时找不到 - 本例通常是“运行时缺 jar” --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值