JENKINS:当我尝试将旧版 JDK 用于特定 Maven 项目时出错

标签 jenkins java-7

我在 CentOS Linux 7.3.1611 服务器上使用 Jenkins 版本 2.73-1.1。

服务器上有 3 个不同版本的 JDK:

[root @ jenkins java] # ll
total 12
lrwxrwxrwx. 1 root root 16 27 Apr 16.25 default -> / usr / java / latest
drwxr-xr-x. 8 root root 4096 27 Mar 2013 jdk1.6.0_45
drwxr-xr-x. Root root 4096 11 Apr 2015 jdk1.7.0_80
drwxr-xr-x. 9 root root 4096 27 Apr 16.25 jdk1.8.0_131
lrwxrwxrwx. 1 root root 22 27 apr 16.25 latest -> /usr/java/jdk1.8.0_131

如下图所示,Jenkins 使用的是 jdk1.8.0_131 版本,在我的项目中我指定使用 JDK7。

Jenkins setup Image 1

Jenkins setup Image 2

当我尝试编译我的项目 ( mvn clean deploy ) 时,构建失败,我在日志中看到此错误:

[Vodafone] $ /usr/java/jdk1.7.0_80/bin/java -cp /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-agent-1.11.jar:/opt/apache-maven-3.0.4/boot/plexus-classworlds-2.4.jar org.jvnet.hudson.maven3.agent.Maven3Main /opt/apache-maven-3.0.4 /var/cache/jenkins/war/WEB-INF/lib/remoting-3.10.jar /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-1.11.jar /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.11.jar 46349 <===[JENKINS REMOTING CAPACITY]===>channel started ERROR: ================================================================================ ERROR: Invalid project setup: jenkins/security/MasterToSlaveCallable : Unsupported major.minor version 52.0 ERROR: [JENKINS-18403][JENKINS-28294] JDK 'JAVA7' not supported to run Maven projects. ERROR: Maven projects have to be launched with a Java version greater or equal to the minimum version required by the master. ERROR: Use the Maven JDK Toolchains (plugin) to build your maven project with an older JDK. ERROR: Retrying with slave Java and setting compile/test properties to point to /usr/java/jdk1.7.0_80. ERROR: ================================================================================ Established TCP socket on 38129 [Vodafone] $ /usr/java/jdk1.8.0_131/jre/bin/java -cp /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-agent-1.11.jar:/opt/apache-maven-3.0.4/boot/plexus-classworlds-2.4.jar org.jvnet.hudson.maven3.agent.Maven3Main /opt/apache-maven-3.0.4 /var/cache/jenkins/war/WEB-INF/lib/remoting-3.10.jar /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-1.11.jar /var/lib/jenkins/plugins/maven-plugin/WEB-INF/lib/maven3-interceptor-commons-1.11.jar 38129 <===[JENKINS REMOTING CAPACITY]===>channel started



为什么 Jenkins 不使用 jdk 7?

最佳答案

正如 maven project plugin 上记录的那样 Jenkins 主页:

Jenkins >= 2.54 requires Java 8 thus Maven jobs must be launched with Java >= 8



幸运的是,您的堆栈跟踪中刚刚提到了最好的解决方法:

... Use the Maven JDK Toolchains (plugin) to build your maven project with an older JDK...



为了使用 java 7 编译您的项目并使用当前的 jenkins 版本启动成功的 jenkins 作业,我建议您使用 this plugin通过 2 个简单的步骤:
  • 添加 工具链.xml 文件到您的 .m2 开发人员系统和 jenkins 服务器上的目录
    <toolchains>
      <toolchain>
        <type>jdk</type>
        <provides>
          <version>1.7</version>
          <vendor>openjdk</vendor>
        </provides>
        <configuration>
          <jdkHome>/usr/lib/jvm/java-7-openjdk-amd64</jdkHome>
        </configuration>
      </toolchain>
      <toolchain>
        <type>jdk</type>
        <provides>
          <version>1.8</version>
          <vendor>openjdk</vendor>
        </provides>
        <configuration>
          <jdkHome>/usr/lib/jvm/java-8-openjdk-amd64</jdkHome>
        </configuration>
      </toolchain> 
      [...]
    </toolchains>
    
  • 添加工具链 插件 到您的项目 pom 文件
    <project>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-toolchains-plugin</artifactId>
            <version>1.1</version>
            <executions>
              <execution>
                <goals>
                  <goal>toolchain</goal>
                </goals>
                </execution>
              </executions>
              <configuration>
                <toolchains>
                  <jdk>
                    <version>1.7</version>  
                    <vendor>openjdk</vendor>
                  </jdk>
                </toolchains>
              </configuration>
          </plugin>
        </plugins>
      </build>
    </project>
    

  • 最后配置您的 jenkins 作业以使用 jdk 8 ,工具链将负责编译您的项目 jdk 7 .

    关于JENKINS:当我尝试将旧版 JDK 用于特定 Maven 项目时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46276236/

    相关文章:

    ruby - RJB + 乘客。 RJB出现不调用Java

    JavaFX 未在 Netbeans 中编译

    java - 使用 RamdomAccesFile 和 FileChannel 对文件进行分块时出现问题

    php - Jenkins PHP 作业失败

    jenkins - 在 Jenkins 构建管道中下载工件

    jenkins - 如何每 15 分钟安排一次 Jenkins 作业

    jenkins - Jenkins 中的存档工件

    linux - ERROR : In file './docker-compose.yml' , service must be a mapping, not a NoneType., 如何解决这个问题

    Android Studio 无法在 Windows 7 上运行

    hadoop - 为什么hadoop总是在寻找java-6-sun