Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Jenkins自由式作业中运行时,Maven目标以Java6模式运行_Maven_Jenkins - Fatal编程技术网

在Jenkins自由式作业中运行时,Maven目标以Java6模式运行

在Jenkins自由式作业中运行时,Maven目标以Java6模式运行,maven,jenkins,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 160

据我所知,在我的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)
这似乎表明我的插件运行在Java6JRE上。怎样?我怎样才能改变这一点

更新

我已经冒昧地从命令行运行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"
因此,“RunMaven高级目标”似乎只是触发了使用错误配置的java版本的mvn可执行文件。但奇怪只会变得更奇怪:

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

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

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

<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>

jdk
1.7
/路径/to/your/jdk7
您可以在此文件中定义多个工具链,每个工具链都提供特定版本的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>

org.apache.maven.plugins

由于您在Jenkins freestyle项目配置中使用的是旧(不推荐的?)版本(3.0)

,因此您可以在配置页面顶部的“高级项目选项”部分之前检查应用于构建的JDK设置。下面是指向相关配置条目的图片

确保您正在使用感兴趣的JDK。下拉框中可用的值是通过Jenkins>Manage Jenkins>Configure System>JDK>JDK安装配置的JDK


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

在自由风格的jenkins构建中,配置在顶部,在高级项目选项之前,您可以设置使用的JDK,这是正确的值吗?@A.DiMatteo请将您的评论转换为我可以(并且将)接受的答案注意,这个问题是后续问题,因此没有涉及pom文件。啊,当然,我有一个詹金斯问题,您的答案不仅是我的pom,而且还进行了修改(这很容易在机器之间共享,虽然我这里没有-但我没有告诉你)和我的settings.xml,它们不共享,所以我应该在涉及的任何机器上手动更改它们。我认为这不是最干净的解决方案;-@Riduidel toolschains配置可以直接在Jenkins上为所有代理完成,自版本2.3(2012)以来,像其他maven设置一样。顺便说一句,我没有注意到您没有pom文件,这是令人惊讶的…:)所以通常正确的方法是使用maven工具链配置,但是如果没有pom,我现在不知道你是否真的可以