2012-08-31 24 views
5

我正在考慮,如果一個Java項目可能會產生2瓶:一個用於java7,一個用於的Java6,是的,源代碼可能使用一些一些java7新功能。我們可以使用JDK 7的javac編譯與java7功能代碼到的Java6字節碼

這樣生成的Java6瓶子,命令行是這樣的:

javac -target 1.6 -bootclasspath jdk1.6.0\lib\rt.jar -extdirs "" MyApp.java 

不幸的是, 它只是發出一個錯誤:

javac: target release 1.6 conflicts with default source release 1.7 

this document,它應該是可能的jdk6 vs jdk5,有人知道它爲什麼不能在jdk7和jdk6中工作嗎?我做錯了什麼,還是隻是官方不支持?

謝謝。

+2

[下面是對Java 7.交叉編譯文檔】(http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#crosscomp-example)'OldCode。預計將被寫入目標源代碼級別。 IIRC,Java 5和Java 6語法都是一樣的。 – McDowell

+0

@McDowell這意味着源代碼不應該包含任何Java7的新功能,對吧? –

+0

正確。如果您希望用Java 7代碼來定位Java 6,那麼您可能需要查看專業的第三方工具。 – McDowell

回答

5

AFAIK,源和目標必須是相同的。即使對於Java 6.唯一的例外是源可以是1.1和目標1.0。

鑑於存在的Java 6和Java 7的最新JVM的JVM差別不大,我建議你考慮升級。同時Java 6中會,結束(自由)服務在2012年十一月,該再過三個月......

+1

同意。升級或降級。交叉編譯是一個很大的痛苦。 – Thilo

+1

@PeterLawrey「2010年11月,從現在起三個月。」我們是否及時回去?爲什麼我在2012年卡住了? :)抱歉不能幫助自己。 – JTMon

+0

@JTMon剛回來!在中國當然不是中國的非法行爲。 ;) –

2

即使有可能的話,通常是一個壞主意 - 如果你想確保你的代碼將在工作然後你必須在java 6上構建它。每個新版本的java都會在類庫中引入新類,並向現有類添加新方法,即使您將java 7編譯器設置爲生成6兼容字節碼,它也會贏得不會發現只有7種方法的情況。

+0

*「不會捕獲您調用7-only方法的情況。」*如果正確使用'bootclasspath'選項,它當然會。 –

+1

的確如此,但是如果您有可用的Java 6安裝,那麼您可以將它的類庫放在Java 7 bootclasspath中,那麼爲什麼不保持簡單並使用該Java 6首先進行編譯...... –

+1

*「Java 6安裝「*安裝意味着JDK。 Bootclasspath可以使用'rt.jar'作爲先前安裝的** JRE **,或者更重要的是,早期版本的'rt.jar',不需要'install'。如果您正在編譯1.7和1.6的代碼以及運行1.3的舊版設備的代碼,那麼處理一組運行時Jars比一組已安裝的JDK(包含一組''java'')要簡單得多。家庭價值觀......)。 –

相關問題