2011-02-13 225 views
6

我想將JDK 1.6用於項目的分支,而其他人則繼續使用JDK 1.5。開發人員希望偶爾在這些之間切換。我可以指定要在Ant build.xml中進行編譯的JDK路徑嗎?

那麼什麼是最好的方法告訴Ant's javac要使用哪個JDK?最好的情況是,我的意思是一個健壯,透明,低維護,與源一起版本化(Ant本身和JDK當然不是,但他們生活在標準的地方)。


明顯-rather比BEST-方式,我猜會是螞蟻之外:不斷變化的JAVA_HOME環境變量。然而,這需要開發人員手動切換(另一件事情要記住:容易出錯),改變所有-many-構建服務器(現在爲我更多的工作)。

尋找一些簡單的javac屬性如jdk-path,我發現了幾個,而不是(感謝在網上讀了和SO):

  • compiler - 很公平,但文件說,「現代:.. javac1.5和javac1.6 ..作爲別名「..對我來說,這表明它不會產生任何不同 - 會嗎?
  • source - 似乎只與JLS版本
  • target操作(雖然不是%從上面鏈接的文檔100清) - 字節碼版本
  • bootclasspath - 一些所謂的答案提到這一點,但不太清楚,似乎hackish的
  • executable - 路徑到javac,但不是libs .. - 似乎是最接近的匹配,隱式指定JDK路徑?更新:由JB Nizet確認
  • fork - 看來我需要在這裏真實(否則它會忽略上述沒有錯誤?)。更新:任何性能影響與默認值? (我猜的JVM啓動時間是更好的,這些天,但仍然)

所以,似乎沒有這些幫助,本身..這是相當於到設置JAVA_HOME之前運行Ant的任意組合?

我心裏有一些黑客(如包裹在每個平臺上的螞蟻可執行剛剛設置的環境變量 - 相當難過),但我真的希望我錯過了一些東西:)

回答

2

使用可執行屬性需要設置fork屬性爲true。這意味着javac ant任務將啓動執行javac的外部進程。

當您手動啓動javac時,您不必指定任何特定的JDK lib目錄:它知道在哪裏可以找到它所屬的JDK的庫。如果你通過ant的javac任務啓動它,它會是一樣的(除非你覆蓋bootclasspath)。

+0

感謝,好點的。雖然我知道運行javac的獨立時JDK路徑推測,螞蟻文檔是從遠在此明確尊重..你能否確認可執行文件+ fork組合是「相當於在運行Ant之前設置JAVA_HOME?」 (請更新答案)+1 – inger 2011-02-13 19:56:11

+0

fork =在Java6中真的很貴? – inger 2011-02-13 21:53:54

1

使用哪個版本的JDK來編譯類應該沒關係。特定JDK編譯資源的方式可能有所不同,但如果差異僅在v1.5和v1.6之間,則可以使用1.6 JDK編譯代碼以與Java 1.5(甚至1.1)兼容。

您可以控制JVM版本編譯使用target屬性:

<javac srcdir="${src}" 
     destdir="${build}" 
     fork="true" 
     source="1.5" 
     target="1.6" /> 
相關問題