在Jenkins自由式作业中运行时,Maven目标以Java6模式运行
据我所知,在我的jenkins机器上,我有两个Java安装:在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
[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,我现在不知道你是否真的可以