Jenkins Maven发布不同JDK的插件

efzxgjgh  于 2023-04-29  发布在  Jenkins
关注(0)|答案(2)|浏览(211)

我想执行一个编译java1的maven版本。8在jdk 1上运行的Jenkins安装代码。7
我有一个用java 1编译的项目。8使用JDK Parameter Plugin。它在进行常规构建时起作用。
当我使用maven release插件进行maven发布时,它会使用java 1 fork一个JVM。7而不是插件上指定的版本。我猜它需要环境中的Java版本。
如果我将该作业的JAVA_HOME设置为1。8、工作
我试图找到一个解决方案,在那里我不必覆盖所有的作业中的JAVA_HOME。
我尝试使用similar post的解决方案,通过强制编译器版本来修复OP问题:

<properties>
   <jee.level>1.8</jee.level>
   <jdk.level>1.8</jdk.level>
</properties>

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <configuration>
       <source>${jee.level}</source>
       <target>${jdk.level}</target>
   </configuration>
</plugin>

但最后我得到的是

[INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project redeem-commons-test: Fatal error compiling: invalid target release: 1.8 -> [Help 1]

任何帮助将不胜感激。

nfg76nw0

nfg76nw01#

到目前为止,我发现的最好的解决方案是升级运行jenkins的容器的JDK,并向后者添加一个JAVA_OPTS,以支持以前的JDK版本。例如-Djava.version=1.7
通过这种方式,我可以构建并发布java 7或java 8的项目。

6yt4nkrj

6yt4nkrj2#

一个类似但略有不同的方法是让Jenkins拥有当前的JVM,并在Jenkins机器上的特定文件夹中安装一个备用JVM。
然后在你的项目中,你可以将JVM机器定义为一个名为Inject environment variables的前置步骤,并在Properties Content上设置:

JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

这样做的好处是,您不需要修改所有旧的现有项目都在使用以前的JVM,而只需在这个项目上选择不同的JVM。
请注意,这种方法是由于尽管Jenkins允许使用多个JDK,但它们对于标准mvn clean install来说工作正常,但在按照OP要求使用“Mvn Release Plugin”时失败。

相关问题