2012-06-26 57 views
4

我們正在忙於升級到Java 1.7。不幸的是,當這些事情發生時,大量的應用程序不能在1.7以下編譯並中斷(即使覆蓋標誌傳遞給1.7)。計劃是儘快重新考慮這些因素。通過Maven構建具有不同JDK版本的JAR

我想以這種方式配置Maven,以便可以基於POM中的某些屬性使用不同的JDK。我遵循http://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html這封信,但無論我做什麼,maven都會忽略POM中指定的java。

的POM具有如下條目:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 
      <configuration> 
       <fork>true</fork> 
       <source>1.6</source> 
       <target>1.6</target> 
       <compiler-version>1.6</compiler-version> 
       <executable>/usr/lib/jvm/java-6-openjdk/bin/javac</executable> 
       <debug>true</debug> 
       <verbose>true</verbose> 
      </configuration> 
     </plugin> 
... 

此外,我沒有得到任何來自「詳細」標誌輸出 - 我覺得奇怪。也許上面完全被忽略了?

編輯:我知道它不工作,因爲檢查META-INF/MANIFEST.MF文件顯示不正確的java版本。使用的版本與當前路徑中的javac相對應。

Manifest-Version: 1.0 
Archiver-Version: Plexus Archiver 
Created-By: Apache Maven 
Built-By: jaco 
Build-Jdk: 1.7.0_147-icedtea 
Implementation-Title: xxx 
Implementation-Vendor: xxx 
Implementation-Version: 1.3.7 
Specification-Title: xxx 
Specification-Vendor: xxx 
Specification-Version: 1.3.7 

編輯:其他的東西是比較有趣的。如果我故意在破解文件參考,我得到:

[INFO] Compilation failure 
Failure executing javac, but could not parse the error: 
/bin/sh: /usr/lib/jvm/java-6-openjdk: Permission denied 

編輯:我懷疑問題出在組件構建清單文件。如果我在我的機器上破壞了Java 7(即將javac重命名爲javac.pleasegoaway),它會編譯!但是,清單文件仍然報告1.7版。現在這已經過去了,變得鬧得沸沸揚揚。

一些幫助將不勝感激,謝謝。

+0

您是否對文檔在鏈接中建議的settings.xml進行了更改? – aglassman

+0

我做過了,但由於它不起作用,我硬編碼路徑以完全繞過它。 –

+0

標籤中是否有標籤正確標記標籤? – aglassman

回答

3

編譯和衝突是兩個獨立的操作。在更改編譯器路徑時發生壓縮錯誤的事實表明編譯正確發生。最有可能的是Maven jar插件使用java7 jar工具來創建jar文件。

+0

嗨jtahlborn - 我懷疑你可能是對的。它看起來像jar操作是使用不正確的版本來jar類。我將通過在代碼中使用菱形運算符並進行編譯來確認這一點。然後,我應該打破......(我沒有倒下你,如果這個工程,我會很樂意給你一個+1和一個答案滴答:)然後:) –

+0

現貨!謝謝。 –

相關問題