如何编译为目标 Java 1.0

How to compile to target Java 1.0

我想将我的代码编译到 Java 1.0 版。

我设法编译成 1.1:

$ java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-2~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
$ javac -target 1.2 -source 1.2 MyClass.java
(works with some warnings)
$ javac -target 1.1 -source 1.2 MyClass.java
(works with some warnings)

但是target选项好像不接受1.0:

$ javac -target 1.0 -source 1.2 MyClass.java
javac: invalid target release: 1.0

如何定位 JDK 1.0?

我希望我的 .class.jar 文件能够在尽可能多的系统上运行,包括非常旧的系统,包括 JDK 1.0。 (我无法访问系统 运行ning JDK 1.0。)

到目前为止我尝试过的:

我认为 -target 1.0 可能有效的原因是这个答案:

在 Java 8 中,最低目标是 JDK 1.1。在 Java 9 中,最低目标增加了 JDK 1.6 (Java 6)。

您正在努力让您的代码与尽可能多的 java 版本兼容,这是一件好事,但由于 Java 6 自 2015 年以来已停止服务,所以真的没有人应该尝试编写与 Java 5 或更早版本一起运行的新代码。

编辑:此外,在 Java 9 中,他们在 Javac 中引入了 --release 标志,这是首选选项,而不是 -source-target 现在。基本上 --release 6-source 1.6 -target 1.6 是一样的,但它还有一个额外的好处,即可以结合目标版本设置引导 class 路径,这非常方便。实际上,这可以防止您在编译器中设置 --release 6,但不小心使用了一些新的 class 或来自 Java 7 或更高版本的语言功能。

TL;DR javac -target 1.1(并且不使用任何 classes 或后来添加的方法)将使其在 JDK >=1.0.2(于 1995-09-16 发布)。回去多了也不可行,因为更早的JDK还没有公开试。

javac -target ... 标志值影响存储在 .class 文件中的次版本号(字节偏移量 4 和 5)和主要版本号(字节偏移量 6 和 7):

  • javac -target 1.1 in JDK 1.8 生成版本 45.3,受 JDK 1.0.2(1995-09-16 发布)支持,JDK 1.1.* ( 1997-02 年发布),JDK >=1.2(1998-12 年发布)。 [source]
  • javac in JDK 1.0.2(来自 jdk-1_0_2-win32-x86.exe、运行 和 Linux 上的 wine)生成版本 45.3。 =35=]
  • 对于 k ≥ 2,JDK 版本 1.k 支持 class 范围在 45.0 到 (44+k).0 之间的文件格式版本。 [source]
  • javac -target 1.2 生成版本 46.0,受 JDK >=1.2.
  • 支持
  • javac -target 1.3 生成版本 47.0,受 JDK >=1.3.
  • 支持
  • javac -target 1.4 生成版本 48.0,受 JDK >=1.4.
  • 支持
  • 等等