我打算在java中編寫專用命令行工具,用於我的私有系統(jdk 7)和我的大學編號服務器(jre 1.4)。從源文件安裝OpenJdk的嘗試失敗了,因爲它缺少了一些依賴關係,在計算服務器上沒有任何意義 - 例如, CUPS。安裝這種依賴關係和它們的依賴關係所需的工作可能會挫敗自動化任務的整個重點,即使生活更輕鬆。Netbeans:設置java交叉編譯
雖然習慣了泛型的方便,但我不想編寫1.4 SOURCE代碼。我發現,通過命令行編譯時,像
javac -target 1.4 -bootclasspath jdk1.4.2/lib/classes.zip \
-extdirs "" OldCode.java
選項是可用的(參見[1]),這應該允許編譯JDK5甚至JDK7特定語法JDK1.4兼容的字節碼,只要我保持清除較新的庫功能(-bootclasspath用於)。
這帶來了兩個問題:
雖然我可以設置每個項目給定的Java版本容易的Netbeans 7.3的合規水平,它迫使我通過增加使用1.4語法以及(可能
-source 1.4
到上面的命令)。我找不到一個老的jdk(特別是classes.zip),除了oracle.com以外,其中需要註冊才能下載那些僅使用註冊掩碼的表單,這很清楚地表明這些不適用於私人用途。
所有相關的答案,我發現至今沒有給出暗示怎麼做這樣的字節碼/源分離的交叉編譯在NetBeans中,沒有地址查找舊的JDK的問題。
Eclipse並不是一個真正的選擇,因爲在那裏我無法弄清楚如何在NetBeans中自動生成JAR。
任何想法?
平臺詳細信息:
地方(從NetBeans中 「幫助→關於」):
Product Version: NetBeans IDE 7.3 (Build 201302132200) Java: 1.7.0_11; Java HotSpot(TM) 64-Bit Server VM 23.6-b04 Runtime: Java(TM) SE Runtime Environment 1.7.0_11-b21 System: Windows 7 version 6.1 running on amd64; Cp1252; de_DE (nb)
遠程:
java version "1.4.2_11" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_11-b06) Java HotSpot(TM) 64-Bit Server VM (build 1.4.2_11-b06, mixed mode)
更新:只要確定 - 可以用Java 1.4的新語法編譯源代碼。例如。我寫這個文件:
class Target<T>{
public T field;
public static void main(String[] args){
System.out.println("Hello World!");
Target<String> target = new Target<>();
target.field = "More Worlds.";
System.out.println(target.field);
}
}
然後,我與JDK 7編譯它做
javac -target jsr14 Target.java
並將其上傳到計算服務器,其中只有JRE 1.4(而沒有JDK的話)是存在的。它給出了預期的輸出
Hello World!
More Worlds.
顯然,「jsr」目標是一個未公開的功能,但請參閱。 [2]。此外,該鏈接提到,這是一個黑客,因爲只有 - 收集庫的每個循環將被處理:
for-each循環:當遍歷數組時,編譯器會生成一個歸納變量和標準數組迭代習語。在迭代集合時,編譯器會生成標準的基於迭代器的習慣用法。在迭代非集合Iterable時,編譯器會產生錯誤。
我想這意味着,我將別無選擇,只能試圖得到一個較新的JRE到服務器,如果我想使用的任何合理的現代功能...
[1] How do i compile a .java with support for older versions of java?
[2] http://twit88.com/blog/2008/08/26/java-understanding-jsr14/