2012-09-19 82 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

相關問題