在Jenkins自由式作业

时间:2016-02-11 10:00:51

标签: maven jenkins

在我的jenkins机器上,据我所知,我有两个Java安装:

[1041][root@server:/tmp]$ alternatives --display java
java - status is manual.
 link currently points to /logiciels/jdk/jdk1.7.0_76_Linux_64bits/jre/bin/java
/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java - priority 16000

我只配置了jdk 7才能在我的工作中使用。 但是,当我运行包含maven目标的自由式作业时,我总是得到

Caused by: java.lang.UnsupportedClassVersionError: myPlugin : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:386)
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230)
    at org.sonatype.guice.bean.reflect.URLClassSpace.loadClass(URLClassSpace.java:101)

这似乎表明我的插件在java 6 JRE上运行。怎么样 ?我怎么能改变它?

更新

我冒昧从命令行运行maven可执行文件......结果如下。

[1041][root@server:/tmp]$ /logiciels/apache-maven-3.0.5/bin/mvn -v
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 14:51:28+0100)
Maven home: /logiciels/apache-maven-3.0.5
Java version: 1.6.0_65, vendor: Sun Microsystems Inc.
Java home: /logiciels/jdk/jdk1.6.0_65_Linux_64bits/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-358.11.1.el6.x86_64", arch: "amd64", family: "unix"

所以,似乎“运行maven高级目标”只是触发了mvn可执行文件,它使用了错误配置的java版本。但奇怪的是只能变得怪异:

[1041][root@server:/tmp]$ echo $JAVA_HOME
/logiciels/jdk/jdk1.5.0_51_Linux_64bits/jre

2 个答案:

答案 0 :(得分:1)

设置maven插件使用的jdk的正确方法是using maven toolchains

Fisrt,在toolchains.xml目录中创建一个.m2,其中包含以下内容:

<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
    <toolchain>
        <type>jdk</type>
        <provides>
            <version>1.7</version>
        </provides>
        <configuration>
            <jdkHome>/path/to/your/jdk7</jdkHome>
        </configuration>
    </toolchain>
</toolchains>

您可以在此文件中定义多个工具链,每个工具链都提供特定版本的java及其路径。

然后,在你的pom中添加工具链插件:

<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>
            </jdk>
        </toolchains>
    </configuration>
</plugin>

一旦你这样做,许多插件,包括编译器maven插件,将使用工具链配置选择的jdk。

这样做可以让你使用任何版本的java来执行maven或主路径上设置的jdk,并在特定机器上查找java的地方添加抽象,因为在toolchains.xml配置中定义了。

顺便说一句,您应该考虑将maven升级到version 3.3+,因为您使用的是旧的(已弃用?)版本(3.0)

答案 1 :(得分:0)

在Jenkins自由式项目配置中,您可以在“高级项目选项”部分之前检查配置页面顶部应用于构建的JDK设置。在指向相关配置条目

的图片下方

enter image description here

确保您使用的是感兴趣的JDK。下拉框中可用的值是通过Jenkins配置的JDK&gt;管理Jenkins&gt;配置系统&gt; JDK&gt; JDK安装..

我刚创建了一个自由风格的构建,其中包含两个步骤,运行javac -versionmvn -version,并在两次运行中更改JDK版本,实际上更改会按预期有效应用。