在 Jenkins 中运行 mvn 测试时 maven-surefire-plugin 的 Java 版本问题

Posted

技术标签:

【中文标题】在 Jenkins 中运行 mvn 测试时 maven-surefire-plugin 的 Java 版本问题【英文标题】:Java version issue with maven-surefire-plugin while running mvn test in Jenkins 【发布时间】:2019-07-06 22:48:37 【问题描述】:

我尝试使用 OpenJDK11 在 Jenkins 中构建工件。首先我运行mvn clean install -DskipTests 并构建成功。

但是当我运行mvn clean install 时,我收到了测试类的以下错误。

<CLASS_NAME> has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0


org.apache.maven.surefire.booter.SurefireBooterForkException: There was an error in the forked process
<CLASS_NAME> has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

pom.xml

<properties>
    <java.version>11</java.version>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties> 
<plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
            <release>11</release>
            <compilerId>groovy-eclipse-compiler</compilerId>
            <compilerArguments>
                <indy/>
                <configScript>config.groovy</configScript>
            </compilerArguments>
        </configuration>
        <dependencies>
            <dependency>
                <groupId>org.codehaus.groovy</groupId>
                <artifactId>groovy-eclipse-compiler</artifactId>
                <version>3.0.0-01</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.groovy</groupId>
                <artifactId>groovy-eclipse-batch</artifactId>
                <version>2.5.5-01</version>
            </dependency>
        </dependencies>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.22.1</version>
        <configuration>
            <includes>
                <include>**/*Spec.*</include>
            </includes>
        </configuration>
    </plugin>
  </plugins>

请帮助我在 Jenkins 中解决此问题

注意:我在本地也遇到了类似的问题。我在 ~/.mavenrc 文件中更改了 JAVA_HOME,问题得到了解决

【问题讨论】:

jenkins server 中可能有多个 java 版本吗?你的詹金斯项目如何配置?使用詹金斯管道? 我猜 maven-compiler-plugin 采用了 pom.xml 中提到的 Java 版本,但没有采用 maven-surefire-plugin .. 有没有办法在 maven-surefire-plugin 中强制执行 java 版本? 使用 toolchains.xml 的解决方案是您可能正在寻找的 - maven.apache.org/surefire/maven-surefire-plugin/java9.html 在 ~/.mavenrc 文件中更改 JAVA_HOME 后问题得到解决。 【参考方案1】:

这只是版本不匹配。您已经使用 Java 8 在本地编译了您的代码,并且您的 Jenkins 具有 JAVA 11。将您的本地代码升级到与 Java 11 兼容。 这是供您阅读的链接。

Class has been compiled by a more recent version of the Java Environment

【讨论】:

感谢您的回复。你的发现是正确的。在我更改了 ~/.mavenrc 文件中的 JAVA_HOME 后,我的问题得到了解决。

以上是关于在 Jenkins 中运行 mvn 测试时 maven-surefire-plugin 的 Java 版本问题的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins-如果测试失败,即使构建通过,也要查看任何失败图标

执行 mvn install 或 mvn test 但不是来自 Intellij 时集成测试失败

删除 mvn release:prepare 上的文件

Intellij 测试通过,mvn 测试失败

Jenkins Maven Build Step失败但从命令行运行

docker 安装并运行jenkins 后不识别服务器上的jdk,maven等配置!