2015-04-23 54 views
1

我有以下情形:在類路徑上編譯以類別1.7爲目標的Java類使用JDK 8構建的類

類Foo引用類Bar中的方法。我想用Javac編譯Foo類,目標是Java 1.7,但在使用Java 8語法的類路徑中提供Bar.class二進制文件,並且使用JDK 8編譯。在生產環境中,JRE 1.7將用於運行我的應用程序在classpath Bar.class不同的副本 - 這個版本的類BAR使用Java 1.7的語法,並與JDK內置7

  1. 承擔欄的方法簽名保持完全一樣,會有編制的任何問題,運行Foo?
  2. 我可以使用JDK 7編譯Foo,還是必須使用JDK 8?
+1

使用Java SE 7編譯器構建的類文件將在Java SE 8中正確運行。使用Java SE 8編譯器構建的類文件不能在早期版本的Java SE上運行。希望能回答你的問題。有關詳細信息,請參閱以下內容:http://www.oracle.com/technetwork/java/javase/8-compatibility-guide-2156366.html – Jimmy

+0

這不回答我的問題,也不正確。完全可以使用JDK 8編譯並使用交叉編譯在JRE 7上運行:http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html –

+0

我沒有看到任何鏈接中的參考線。如果你使用1.8編譯器引用,從你自己的引用鏈接,你的類實現基於1.8,我嚴重懷疑它會運行在由7提供的環境。但是,我還沒有嘗試過。請稍後再回答這個問題,看看它如何跟你一起。 – Jimmy

回答

2

對於直接的javac,可以使用-source/-target讓Java8 JDK構建Java7類文件(這實際上意味着在類文件中放入不同的版本號)。

我的構建使用Maven,而當我的Jenkins服務器使用Java8構建時,指定的源/目標爲1.7,並且每個人都可以使用其現有的Java7 JDK運行。當第一個依賴項目遷移到Java8時,Maven POM更改爲構建1.8目標,並且每個人都被迫升級。