2017-04-21 56 views
1

我一直在試圖編譯我的項目與一個更高的編譯器合規性水平比項目的其餘部分一個特定的類,但我不知道如何做到這一點。編譯類與不同的編譯器兼容版本比其餘的在Eclipse中

我正在編譯Java 6中的項目(出於兼容性原因),並且存在一個需要Java 8的類,並且只會在代碼中實例化(使用反射),如果它運行的Java版本> = 8。

問題是,在Java 8中的類顯然不能在Java 6中編譯,所以我想問一下,如果Eclipse中有一種方法可以在將項目導出到Java 8時用Java 8編譯這個類一個可運行的罐子。

總是有選擇在Java 6中編譯項目(不包含java 8類),導出並手動編譯該類,然後用Java 8手動插入Jar文件,該工作正常但不是很好方便。

例如讓假設項目包括以下內容:

一個共同的接口:

public interface CommonInterface { 

    public void foo(); 

} 

一個Java類8:

public class Java8Class implements CommonInterface { 

    @Override 
    public void foo() { 
     Arrays.asList("Some", "Java", "8", "code").forEach(System.out::println); 
    } 

} 

一個Java類6+:

public class Java6PlusClass implements CommonInterface { 

    @Override 
    public void foo() { 
     List<String> list = Arrays.asList("Some", "Java", "6", "code"); 
     for (String s : list) { 
      System.out.println(s); 
     } 
    } 

} 

和主節目類:

public class Selector { 

    public static void main(String[] args) throws ReflectiveOperationException{ 
     CommonInterface ci = getCorrectInstance(); 
     ci.foo(); 
    } 

    private static CommonInterface getCorrectInstance() throws ReflectiveOperationException { 
     String version = System.getProperty("java.version"); 
     Matcher m = Pattern.compile("\\d\\.(\\d)\\..+").matcher(version); 
     String clazz = null; 
     if (m.find()) { 
      int jv = Integer.parseInt(m.group(1)); 
      if (jv == 8) 
       clazz = "Java8Class"; 
      else if (jv >= 6) 
       clazz = "Java6PlusClass"; 

     } 
     if (clazz == null) 
      return null; 
     return (CommonInterface) Class.forName(clazz).newInstance(); 
    } 

} 

在上述例子中,是有可能配置Eclipse使得除了「Java8Class」的所有類與Java 6順應性和「Java8Class」編譯與Java 8遵守編譯?

謝謝。

+0

爲什麼不編譯8中的所有內容? – MGorgon

+0

因爲有些計算機不能支持Java 8,所以他們超出了我的控制範圍,因此我無法在其上更新Java。 –

+1

,不會工作@azurefrog,因爲java 8類使用java 8特定的代碼,不能被編譯爲java 6可能 – Imus

回答

1

你不能在Eclipse中這樣做,我不相信你試圖達到的是一個好主意。

這裏是你能做什麼,而不是:

  1. 更改這個Java 8類的代碼的東西等同於Java 6中(如果可能)。
  2. 使用這個類創建一個新項目,並使用Java 8合規性級別進行編譯。在啓動應用程序時,在命令行中指定這個新的jar文件,它應該做到這一點。
  3. 有兩個不同版本的應用程序(一個兼容Java 8,另一個兼容Java 6),並根據系統上可用的Java版本啓動正確的應用程序。

我不完全確定,如果第二個選項可以簡單地通過將jar文件放入類路徑中,在使用Java 6 JRE執行程序的情況下。你可能可能必須做一些類加載器的詭計,如果它無法啓動。

+0

嘿,爲遲到的迴應道歉。好的或壞的想法,它提供了兼容性,這就是我感興趣的:( 我想知道eclipse是否能夠通過內置功能或通過插件編譯具有不同合規性級別的某些類,因爲這是不可能的我想不適合編譯不同的版本,不適合手動合併它們,儘管這很快就會變得混亂:( 感謝您的反應! –