gpt4 book ai didi

java - 网 bean : Setting up java cross-compilation

转载 作者:太空宇宙 更新时间:2023-11-04 07:46:41 27 4
gpt4 key购买 nike

我打算用 java 编写私有(private)使用的命令行工具,以便在我的私有(private)系统(jdk 7)和我的大学数字处理服务器(jre 1.4)上使用。尝试从源安装 OpenJdk 失败了,因为它缺少几个依赖项,这在计算服务器上根本没有意义——例如杯子。安装此类依赖项及其依赖项所需的工作可能会破坏自动化任务的全部意义,即让生活变得更轻松。

虽然习惯了泛型的便利,但我不想编写 1.4 源代码。我发现,从命令行编译时,诸如

之类的选项
javac -target 1.4 -bootclasspath jdk1.4.2/lib/classes.zip \
-extdirs "" OldCode.java

可用(参见[1]),只要我不了解更新的库功能( -bootclasspath 的用途),它应该允许将 jdk5 甚至 jdk7 特定语法编译为 jdk1.4 兼容字节码。

这带来了两个问题:

  1. 虽然我可以在 Netbeans 7.3 中轻松地将每个项目的合规性级别设置为给定的 java 版本,但它也迫使我使用 1.4 语法(可能通过在上面的命令中添加 -source 1.4 来实现)。

  2. 除了 oracle.com 之外,我在任何地方都找不到旧的 jdk(特别是classes.zip),在该网站上,需要注册才能下载那些仅带有注册掩码的 jdk,这清楚地表明这些不适合私有(private)使用。

到目前为止,我发现的所有相关答案都没有提示如何在 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]。该链接还提到,这有点像黑客,因为只会处理 Collections 库的 for-each 循环:

for-each loop: When iterating over an array, the compiler generates an induction variable and the standard array iteration idiom. When iterating over a Collection, the compiler generates the standard iterator-based idiom. When iterating over a non-Collection Iterable, the compiler produces an error.

我想这意味着,如果我想使用任何相当现代的功能,我别无选择,只能尝试在服务器上安装更新的 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/

最佳答案

JDK 不向前兼容。也就是说,您无法为旧的 JDK 版本编译新功能。 (或 JRE)。如果我没有完全弄错的话,语言结构(例如泛型)是 Java 中字节码或解释器的一部分。

据我所知你只有两个选择。 1) 安装新的 JDK 或 2) 编写 1.4 源代码。

关于java - 网 bean : Setting up java cross-compilation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15187901/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com