2009-04-15 80 views
1

這裏是我的方案:java用不同的JDK版本構建:相同的工件?

  • 工作站A:太陽JDK 1.6
  • 工作站B:孫JDK 1.5

我建立在A和B使用Ant 1.7

<javac srcdir="${foo}" destdir="${bar}" source="1.5" target="1.5"> 
    <include name="**/*.java"/> 
    <exclude name="**/test/**/*.java"/> 
</javac> 

但A & B的文件大小不同,更不用說CRC了。它應該是這樣嗎?還是我錯過了明顯的東西?

回答

5

是的,它應該是這樣。即使針對同一個VM,不同的編譯器可能會發出不同的字節碼。只要生成的程序行爲正確,JLS就不會精確地規定如何將源代碼編譯爲字節碼。

5

雖然你可能明確設置source="1.5"target="1.5",但這其中javac編譯器的JDK版本正在運行控制。

因此,在指向JDK 1.6的工作站上,您可以使用1.6 javac構建的類文件,該文件應該與1.5 JRE兼容。

但是,source="1.5"target="1.5"僅指定語法/語言功能的兼容性;如果您只依賴1.6 JRE中的某些類,那麼在1.6 javac中使用source="1.5"target="1.5"時,您將不會收到任何編譯器警告。

要解決最後一點,您需要告訴<javac> Ant任務使用不同的bootclasspath

+0

+1 - 不是爲了答案,而是爲了有用的提示(沒有想到這一點) – 2009-04-15 17:01:56

相關問題