2012-09-19 50 views
0

我的问题是:测试用例在本地是绿色的,但有些在哈德森服务器上因为不支持的jdk版本而失败。本地是ibm jdk1.6 sr4 windows,但是hudson服务器安装了ibm jdk1.6 sr9 linux。 “此Java虚拟机不支持与Blaze Advisor一起使用,因为java.beans.Introspector的实现未能通过验证。”如何为maven指定特定的jdk版本来构建我的项目?

我被告知Hudson服务器不能更改为其他jdk,所以我认为有没有绕过这些失败的工作? 我可以告诉maven用特定的jdk编译项目吗?像sr4的1.6版本,而不是sr9。另外我需要maven下载sr4作为依赖关系,因为服务器上没有这个版本。

看起来很难做到这一点,因为我搜索出来。那么我还有什么选择?

感谢您的任何建议。

+0

你可以改变的Java 1.3,1.4,5,6之间版本的安装位置,也许7.但是未成年人版本,可能不在那里。 – Nishant

+0

您可以指定要使用的准确Java SDK版本,但必须在服务器上可用。请参阅:[编译使用不同的JDK](http://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html) – noahlz

回答

1

如果您需要使用不同的版本,Maven应该从JAVA_HOME中指定的java开始我将使用工具链插件来运行您的构建与指定的jdk版本。它需要版本已经安装在服务器上。

http://maven.apache.org/guides/mini/guide-using-toolchains.html

您需要的插件添加到您的POM并添加toolchains.xml文件。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-toolchains-plugin</artifactId> 
    <version>1.0</version> 
    <executions> 
     <execution> 
     <phase>validate</phase> 
     <goals> 
      <goal>toolchain</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <toolchains> 
     <jdk> 
      <version>1.5</version> 
      <vendor>sun</vendor> 
     </jdk> 
     </toolchains> 
    </configuration> 
    </plugin> 

toolchains.xml文件添加到文件夹的.m2指定的JDK

<?xml version="1.0" encoding="UTF8"?> 
<toolchains> 
    <toolchain> 
    <type>jdk</type> 
    <provides> 
     <version>1.5</version> 
     <vendor>sun</vendor> 
     <id>default</id> 
    </provides> 
    <configuration> 
     <jdkHome>/path/to/jdk/1.5</jdkHome> 
    </configuration> 
    </toolchain> 
+0

这是我的痛点。服务器仅安装了不受支持的JDK版本。 – Sarstime

+0

@Sarstime我不认为有这个问题,如果你不能直接安装它,你可以尝试通过hudson配置菜单(管理 - >配置系统 - > JDK安装)来安装你需要的JDK版本 –

+0

yes , 你是对的。我发现没有办法解决。所以我的解决方案是改变我的测试用例以绕过这些冲突。 – Sarstime

0

确定吗?哈德森应该支持切换JDK,我在詹金斯做过。在最坏的情况下,您可以在Hudson版本中指定JAVA_HOME env变量。在maven中改变是不可能的,因为maven本身需要JDK才能启动。

+0

是的,maven支持切换jdk,但是什么我需要使用1.6不同的小版本,sr4,而不是sr9。似乎maven不支持。 – Sarstime

+0

@Sarstime不,maven不支持jdk切换,这是不可能的,正如我所说的。它只是将'-source'和'-target'选项传递给javac。 – kan

0

您可以在maven-compiler-plugin

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 

配置此您还可以使用配置文件-P设置基于环境的版本。

+0

这对应于'javac'使用的'-source'和'-target'标志,但不设置实际的编译器。请参阅[javac文档](http://docs.oracle.com/javase/6/docs/technotes/tools/windows/javac.html) – noahlz

+0

为了使此配置正常工作,必须指定javac可执行文件,并建立'分叉'使用不同的jvm。请参阅http://stackoverflow.com/a/4724062/127971(这反过来指向这个答案,实际上:http://stackoverflow.com/a/12498238/201498) – michael

相关问题