在我的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
答案 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)