JENKINS:当我尝试对特定 Maven 项目使用较旧的 JDK 时出现错误

Mar*_*ich 6 java-7 jenkins maven-toolchains-plugin

我在 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
Run Code Online (Sandbox Code Playgroud)

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

Jenkins 设置图 1

Jenkins 设置图 2

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

[沃达丰] $ /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 远程处理能力]===>通道启动错误:===================== =================================================== ========= 错误:无效的项目设置:jenkins/security/MasterToSlaveCallable:不支持的 Major.minor 版本 52.0 错误:[JENKINS-18403][JENKINS-28294] 不支持 JDK 'JAVA7' 运行 Maven 项目。错误:Maven 项目必须使用大于或等于 master 所需的最低版本的 Java 版本启动。错误:使用 Maven JDK 工具链(插件)使用较旧的 JDK 构建您的 Maven 项目。错误:使用从 Java 重试并将编译/测试属性设置为指向 /usr/java/jdk1.7.0_80。错误:================================================== ================================ 在 38129 [Vodafone] $ /usr/java/jdk1.8.0_131 上建立 TCP 套接字/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 远程处理能力]===>通道已启动

为什么Jenkins不使用jdk 7?

Kay*_*ani 6

正如Jenkins 主页的Maven 项目插件中记录的那样:

Jenkins >= 2.54 需要 Java 8,因此 Maven 作业必须使用 Java >= 8 启动

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

...使用Maven JDK 工具链(插件)使用较旧的 JDK 构建您的 Maven 项目...

为了使用 java 7 编译您的项目并使用当前 Jenkins 版本成功启动 Jenkins 作业,我建议您通过两个简单步骤使用工具链插件:

  • toolchains.xml文件添加到开发人员系统和 Jenkins 服务器上的.m2目录

     <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>
    
    Run Code Online (Sandbox Code Playgroud)
  • 将工具链插件添加到项目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>
    
    Run Code Online (Sandbox Code Playgroud)

最后,将您的 Jenkins 作业配置为使用jdk 8,工具链将负责使用jdk 7编译您的项目。