Maven internal.aether与eclipse aether-util依赖冲突启动报错求助
异常信息(翻译后)
应用启动失败
描述:
尝试调用一个不存在的方法。调用发起位置:
org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory.newRepositorySession(DefaultRepositorySystemSessionFactory.java:180)不存在的方法:
org.eclipse.aether.util.repository.DefaultMirrorSelector.add(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZLjava/lang/String;Ljava/lang/String;)Lorg/eclipse/aether/util/repository/DefaultMirrorSelector;调用方类org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory的加载路径:
jar:file:/Users/username/.m2/repository/org/apache/maven/maven-core/3.8.1/maven-core-3.8.1.jar!/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.class被调用方类org.eclipse.aether.util.repository.DefaultMirrorSelector的可用路径:
jar:file:/Users/username/.m2/repository/org/eclipse/aether/aether-util/1.1.0.redhat-1/aether-util-1.1.0.redhat-1.jar!/org/eclipse/aether/util/repository/DefaultMirrorSelector.class被调用方类的层级加载路径:
org.eclipse.aether.util.repository.DefaultMirrorSelector: file:/Users/username/.m2/repository/org/eclipse/aether/aether-util/1.1.0.redhat-1/aether-util-1.1.0.redhat-1.jar操作建议:
修正应用的类路径,使其包含org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory和org.eclipse.aether.util.repository.DefaultMirrorSelector的兼容版本
问题根源
这是典型的依赖版本冲突:你使用的Maven Core 3.8.1依赖的Eclipse Aether版本(1.9.x系列),与项目中引入的aether-util:1.1.0.redhat-1版本不兼容——低版本的DefaultMirrorSelector类没有高版本Maven Core需要的方法签名,导致调用失败。
解决步骤
1. 定位冲突依赖的来源
执行Maven命令排查依赖树,找到引入低版本aether-util的具体依赖:
mvn dependency:tree -Dverbose -Dincludes=org.eclipse.aether:aether-util
命令输出会显示所有引入该依赖的路径,比如[groupId]:[artifactId]:[version] -> org.eclipse.aether:aether-util:1.1.0.redhat-1。
2. 排除冲突依赖并强制指定兼容版本
- 在引入冲突依赖的pom节点中添加排除规则,阻止低版本
aether-util被引入:
<dependency> <!-- 替换为你找到的引入冲突的依赖 --> <groupId>com.example</groupId> <artifactId>conflicting-dependency</artifactId> <version>x.y.z</version> <exclusions> <exclusion> <groupId>org.eclipse.aether</groupId> <artifactId>aether-util</artifactId> </exclusion> </exclusions> </dependency>
- 在项目的
dependencyManagement节点中强制指定与Maven 3.8.1兼容的aether-util版本(推荐1.9.0):
<dependencyManagement> <dependencies> <dependency> <groupId>org.eclipse.aether</groupId> <artifactId>aether-util</artifactId> <version>1.9.0</version> </dependency> <!-- 若存在其他Aether组件(如aether-api、aether-impl),也需同步指定1.9.0版本 --> </dependencies> </dependencyManagement>
3. 清理缓存并重新构建
执行命令清理本地仓库缓存,重新下载兼容版本的依赖并构建项目:
mvn clean install -U
4. 验证其他Aether组件版本
检查项目中所有Aether相关依赖的版本,确保它们统一为1.9.0,避免出现连锁版本冲突。
内容的提问来源于stack exchange,提问作者Balaji211

