当前位置: 首页 > 知识库问答 >
问题:

Jenkins:当我尝试将旧的JDK用于特定的maven项目时出错

袁永贞
2023-03-14

我正在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.0131版本,在我的项目中我指定使用JDK7。

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错误:Maven项目必须以高于或等于主程序所需最低版本的Java版本启动。错误:使用Maven JDK工具链(插件)用旧的JDK构建Maven项目。错误:重试从Java并将编译/测试属性设置为指向/usr/Java/jdk1.7.0_80。错误:

为什么Jenkins不使用JDK7?

共有1个答案

邵子平
2023-03-14

正如jenkins主页的maven project plugin所记录的:

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

幸运的是,您的StackTrace中刚刚提到了最好的解决方法:

<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>
<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>
 类似资料:
  • 问题内容: 今天,我将本地Glassfish服务器升级到3.1.1,以准备将公司的服务器升级到相同版本。我正在尝试将我的Web服务项目转换为与新服务器兼容,并且遇到了障碍。 在我耳朵的pom文件中,我以前将webapp和ejb都列为依赖项。在webapp的pom中,我也将ejb列为依赖项。尝试将此配置部署到Glassfish 3.1.1时,出现以下错误: 部署期间发生错误:部署应用程序时发生异常[

  • 我的日志猫: 2022-07-29 21:42:03.128 24303-24303/com.example。newcadviewerapp E/AndroidRuntime:致命异常:主进程:com.example。newcadviewerapp,PID:24303 java.lang.RuntimeException:无法启动活动组件信息{com.example.newcadviewerapp

  • 这是我的ProdottoController: Prodotto实体: 这是视图(Freemarker): 当我尝试将值更新到表中时,出现以下错误: FreeMarker模板错误(调试模式;在生产中使用RETHROW!):以下内容已评估为null或缺失:==

  • My AccountEntityToAccount方法出现错误,返回类型Transaction是抽象类或接口。提供非抽象/非接口结果类型或工厂方法。AccountEntityToAccount(AccountEntity AccountEntity); 我怎样才能解决这个问题。我的事务类应该是抽象的,我无法更改抽象关键字

  • 我必须处理不同的项目,其中一个是使用Java 8,另一个是Java 17。上周我在使用Java 17,现在我正在尝试将我的配置还原为使用Java 8。 这些是我的配置 我也删除了~/. m2内的所有文件夹。 我在IntelliJ中的配置是: 项目结构 SDK:OpenJDK 1.8 语言级别:SDK默认 项目结构 模块SDK:项目SDK(OpenJDK 1.8) 首选项|构建、执行、部署|编译器|