如何编译为目标 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。)
到目前为止我尝试过的:
- 用
ecj-3.0.2.jar
编译:不支持-target 1.0
,最小为-target 1.1
。
- 用 JDK 1.0 编译:我不能 运行,它没有为 Linux 发布。
- 用 JDK 1.1 编译:我不能 运行,它没有为 Linux 发布。
- 使用 JDK 1.2 编译:Linux i386 javac 二进制文件不工作,它给我 分段错误。
- 使用 JDK 1.3 编译:
javac: invalid target release: 1.0
.
- 使用 JDK 1.4 编译:
javac: invalid target release: 1.0
.
- 使用 JDK 1.5 编译:
javac: invalid target release: 1.0
。这是第一个 JDK 与 Linux amd64 二进制文件。
- 使用 JDK 1.6 编译:
javac: invalid target release: 1.0
.
- 使用 JDK 1.7 编译:
javac: invalid target release: 1.0
.
- 使用 JDK 1.8 编译:
javac: invalid target release: 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. 支持
- 等等
我想将我的代码编译到 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。)
到目前为止我尝试过的:
- 用
ecj-3.0.2.jar
编译:不支持-target 1.0
,最小为-target 1.1
。 - 用 JDK 1.0 编译:我不能 运行,它没有为 Linux 发布。
- 用 JDK 1.1 编译:我不能 运行,它没有为 Linux 发布。
- 使用 JDK 1.2 编译:Linux i386 javac 二进制文件不工作,它给我 分段错误。
- 使用 JDK 1.3 编译:
javac: invalid target release: 1.0
. - 使用 JDK 1.4 编译:
javac: invalid target release: 1.0
. - 使用 JDK 1.5 编译:
javac: invalid target release: 1.0
。这是第一个 JDK 与 Linux amd64 二进制文件。 - 使用 JDK 1.6 编译:
javac: invalid target release: 1.0
. - 使用 JDK 1.7 编译:
javac: invalid target release: 1.0
. - 使用 JDK 1.8 编译:
javac: invalid target release: 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. 支持
- 等等