我打算在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/