Maven部署报NoSuchMethodError错误,Jenkins环境部署失败求助
解决Maven部署时的
NoSuchMethodError: RepositoryLayout.getChecksumAlgorithmFactories()问题 问题场景
在Jenkins中执行命令 mvn clean deploy -DskipTests 部署构件时失败,抛出以下错误:
Exception in thread "main" java.lang.NoSuchMethodError: org.eclipse.aether.spi.connector.layout.RepositoryLayout.getChecksumAlgorithmFactories()Ljava/util/List; at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get(BasicRepositoryConnector.java:189) at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:514) at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:402) at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:229) at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:207) at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:244) at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:175) at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.resolveCachedArtifactDescriptor(DefaultDependencyCollector.java:538) at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.getArtifactDescriptorResult(DefaultDependencyCollector.java:523) at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:410) at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:362) at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process(DefaultDependencyCollector.java:349) at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:254) at org.eclipse.aether.internal.impl.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:284) at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolveInternal(DefaultPluginDependenciesResolver.java:206) at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:153) at org.apache.maven.plugin.internal.DefaultMavenPluginManager.createPluginRealm(DefaultMavenPluginManager.java:404) at org.apache.maven.plugin.internal.DefaultMavenPluginManager.setupPluginRealm(DefaultMavenPluginManager.java:374) at org.apache.maven.plugin.DefaultBuildPluginManager.getPluginRealm(DefaultBuildPluginManager.java:234) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:105) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:972) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:293) at org.apache.maven.cli.MavenCli.main(MavenCli.java:196) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
本地两个不同环境部署均成功,当前Jenkins使用环境:
- JDK:openjdk version "1.8.0_382" OpenJDK Runtime Environment Corretto-8.382.05.1
- Maven:Apache Maven 3.8.3
已尝试调整项目内Maven依赖及插件版本,问题未解决。
原因分析
该错误属于版本依赖冲突:Maven 3.8.x 依赖的 org.eclipse.aether 组件版本(1.9.0)与Jenkins环境中全局配置、仓库缓存的旧版Aether组件存在冲突,导致运行时找不到新添加的getChecksumAlgorithmFactories()方法。本地环境无冲突是因为本地仓库干净,或全局配置未引入冲突依赖。
解决方案
检查Jenkins的Maven安装完整性
- 确认Jenkins使用的Maven安装包是官方纯净版,未在
Maven_HOME/conf/extensions.xml或lib目录下添加额外的Aether相关jar包,避免人为引入版本冲突。
- 确认Jenkins使用的Maven安装包是官方纯净版,未在
统一锁定Aether组件版本
在项目根pom.xml的dependencyManagement节点中添加以下配置,强制所有依赖使用与Maven3.8.3兼容的Aether版本:<dependencyManagement> <dependencies> <!-- 锁定Aether版本与Maven3.8.3一致 --> <dependency> <groupId>org.eclipse.aether</groupId> <artifactId>aether-api</artifactId> <version>1.9.0</version> </dependency> <dependency> <groupId>org.eclipse.aether</groupId> <artifactId>aether-spi</artifactId> <version>1.9.0</version> </dependency> <dependency> <groupId>org.eclipse.aether</groupId> <artifactId>aether-impl</artifactId> <version>1.9.0</version> </dependency> <dependency> <groupId>org.eclipse.aether</groupId> <artifactId>aether-connector-basic</artifactId> <version>1.9.0</version> </dependency> <dependency> <groupId>org.eclipse.aether</groupId> <artifactId>aether-transport-http</artifactId> <version>1.9.0</version> </dependency> </dependencies> </dependencyManagement>清理Jenkins本地Maven仓库
删除Jenkins服务器上Maven本地仓库中Aether相关目录(示例路径:~/.m2/repository/org/eclipse/aether),清理缓存后重新执行构建。对比本地与Jenkins环境差异
- 确认Jenkins的JDK、Maven版本与本地完全一致;
- 检查Jenkins的
settings.xml配置,确保未配置特殊镜像或仓库导致拉取到不兼容的依赖版本; - 对比环境变量(如
MAVEN_OPTS),排除因JVM参数差异导致的类加载问题。
内容的提问来源于stack exchange,提问作者Mario Martinez
相关产品推荐
相关产品推荐

