maven - 在 CI 构建中突然出现“NoSuchMethodError: org.codehaus.plexus.compiler.CompilerConfiguration.isParameters”
问题描述
我突然看到一个 CI Maven 构建失败,如下所示:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile (default-compile) on project CheckoutMs: Execution default-compile of goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile failed: An API incompatibility was encountered while executing org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile: java.lang.NoSuchMethodError: org.codehaus.plexus.compiler.CompilerConfiguration.isParameters()Z
[ERROR] -----------------------------------------------------
[ERROR] realm = plugin>org.apache.maven.plugins:maven-compiler-plugin:3.6.1
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/home/jenkins/.m2/repository/org/apache/maven/plugins/maven-compiler-plugin/3.6.1/maven-compiler-plugin-3.6.1.jar
[ERROR] urls[1] = file:/home/jenkins/.m2/repository/org/codehaus/groovy/groovy-eclipse-compiler/3.3.0-01/groovy-eclipse-compiler-3.3.0-01.jar
[ERROR] urls[2] = file:/home/jenkins/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.6/plexus-component-annotations-1.6.jar
[ERROR] urls[3] = file:/home/jenkins/.m2/repository/org/apache/xbean/xbean-reflect/3.7/xbean-reflect-3.7.jar
[ERROR] urls[4] = file:/home/jenkins/.m2/repository/com/google/collections/google-collections/1.0/google-collections-1.0.jar
[ERROR] urls[5] = file:/home/jenkins/.m2/repository/org/codehaus/groovy/groovy-eclipse-batch/2.5.5-01/groovy-eclipse-batch-2.5.5-01.jar
[ERROR] urls[6] = file:/home/jenkins/.m2/repository/org/sonatype/sisu/sisu-inject-bean/1.4.2/sisu-inject-bean-1.4.2.jar
[ERROR] urls[7] = file:/home/jenkins/.m2/repository/org/sonatype/sisu/sisu-guice/2.1.7/sisu-guice-2.1.7-noaop.jar
[ERROR] urls[8] = file:/home/jenkins/.m2/repository/org/codehaus/plexus/plexus-utils/2.0.4/plexus-utils-2.0.4.jar
[ERROR] urls[9] = file:/home/jenkins/.m2/repository/org/sonatype/aether/aether-util/1.7/aether-util-1.7.jar
[ERROR] urls[10] = file:/home/jenkins/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.14/plexus-interpolation-1.14.jar
[ERROR] urls[11] = file:/home/jenkins/.m2/repository/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar
[ERROR] urls[12] = file:/home/jenkins/.m2/repository/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar
[ERROR] urls[13] = file:/home/jenkins/.m2/repository/org/apache/maven/shared/maven-shared-utils/3.1.0/maven-shared-utils-3.1.0.jar
[ERROR] urls[14] = file:/home/jenkins/.m2/repository/commons-io/commons-io/2.5/commons-io-2.5.jar
[ERROR] urls[15] = file:/home/jenkins/.m2/repository/org/apache/maven/shared/maven-shared-incremental/1.1/maven-shared-incremental-1.1.jar
[ERROR] urls[16] = file:/home/jenkins/.m2/repository/org/ow2/asm/asm/6.0_ALPHA/asm-6.0_ALPHA.jar
[ERROR] urls[17] = file:/home/jenkins/.m2/repository/com/thoughtworks/qdox/qdox/2.0-M5/qdox-2.0-M5.jar
[ERROR] urls[18] = file:/home/jenkins/.m2/repository/org/codehaus/plexus/plexus-compiler-api/2.8.1/plexus-compiler-api-2.8.1.jar
[ERROR] urls[19] = file:/home/jenkins/.m2/repository/org/codehaus/plexus/plexus-compiler-manager/2.8.1/plexus-compiler-manager-2.8.1.jar
[ERROR] urls[20] = file:/home/jenkins/.m2/repository/org/codehaus/plexus/plexus-compiler-javac/2.8.1/plexus-compiler-javac-2.8.1.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import from realm ClassRealm[maven.api, parent: null]]
通过一些分析,我可以看到“isParameters”方法在 plexus-compiler-api 的 2.8.3 版本中可用,但在 2.8.1 中不可用,这里正在使用它。这不是对正在构建的项目的直接或间接依赖。
这个错误在它发生的项目中是可重复的。它从 1 月 26 日午夜后 2 分钟开始发生。在此之前的 6 分钟之前运行的此版本的先前版本在前一天没有看到此症状。
我还查看了为此构建提取的每个存储库的 git 提交 ID,它们在上一次成功构建和第一次(和持续)失败之间是相同的。
这意味着基础设施中一定发生了一些变化。我不这么认为。不同的团队会这样做。我想从这篇文章中得到任何线索,我可以传递关于可能导致这种情况的变化的任何线索。
解决方案
这是由于plexus-compiler-eclipse
未正确解决其对plexus-compiler-api
. 不知道为什么 - 这是它的pom.xml
.
它目前正在通过 Maven Compiler Plugin 解决该依赖项的版本,这就是为什么将其更新为最新版本的原因,例如:
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
修复依赖关系,例如它会导致:
< [INFO] org.codehaus.plexus:plexus-compiler-api:jar:2.8.1
< [INFO] org.codehaus.plexus:plexus-compiler-manager:jar:2.8.1
< [INFO] org.codehaus.plexus:plexus-compiler-javac:jar:2.8.1
---
> [INFO] org.codehaus.plexus:plexus-compiler-api:jar:2.8.4
> [INFO] org.codehaus.plexus:plexus-compiler-manager:jar:2.8.4
> [INFO] org.codehaus.plexus:plexus-compiler-javac:jar:2.8.4
导致此问题的 API 更改已在此提交中引入,首先在插件 2.8.2 中发布,这就是为什么引用最新版本(例如 2.8.6)而不通过maven-compiler-plugin
latest 传递 API 依赖关系会导致此问题。
推荐阅读
- typescript - 打字稿设置功能成员和使用这个
- javascript - Promise 从 `then` 中调用 `catch`
- bash - 在哪个状态下调用了“内部错误!”?
- xcode - 使用 Xcode 10 进行基础国际化
- java-8 - javaslang/Vavr:如何尝试使用资源
- html - 无法点击自定义复选框
- r - 当我们想要更改变量参数名称时,我们如何使用具有 Data agrument 的函数
- selenium - 仅在 IE 中单击登录按钮时发生错误
- angular - 以角度 4 在网格中显示 json 数组数据
- matlab - 如何使用单行打印捕获的异常的堆栈跟踪?