如何编译为目标 Java 1.0 [英] How to compile to target Java 1.0
问题描述
我想将我的代码编译到 Java 1.0 版.
我设法编译成1.1
:
$ java -versionopenjdk 版本1.8.0_181"OpenJDK 运行时环境(构建 1.8.0_181-8u181-b13-2~deb9u1-b13)OpenJDK 64 位服务器 VM(构建 25.181-b13,混合模式)$ javac -target 1.2 -source 1.2 MyClass.java(适用于一些警告)$ javac -target 1.1 -source 1.2 MyClass.java(适用于一些警告)
但是target
选项好像不接受1.0
:
$ javac -target 1.0 -source 1.2 MyClass.javajavac:无效的目标版本:1.0
我如何以 JDK 1.0 为目标?
我希望我的 .class 和 .jar 文件能够在尽可能多的系统上工作,包括非常旧的系统,包括 JDK 1.0.(我无权访问运行 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:目标版本无效:1.0
. - 使用 JDK 1.4 编译:
javac:目标版本无效:1.0
. - 使用 JDK 1.5 编译:
javac:目标版本无效:1.0
.这是第一个带有 Linux amd64 二进制文件的 JDK. - 使用 JDK 1.6 编译:
javac:目标版本无效:1.0
. - 使用 JDK 1.7 编译:
javac:目标版本无效:1.0
. - 使用 JDK 1.8 编译:
javac:目标版本无效:1.0
.(当我问这个问题时,我首先遇到了这个错误.)
我相信 -target 1.0
可能工作的原因是这个答案:https://stackoverflow.com/a/26148408
TL;DR javac -target 1.1
(并且不使用任何后来添加的类或方法) 将使其适用于 JDK >=1.0.2(于 1995-09-16 发布).返回更多是不可行的,因为早期的 JDK 无法公开尝试.
javac -target ...
标志值影响存储在 .class 文件中的次要(字节偏移量 4 和 5)和主要(字节偏移量 6 和 7)版本号:>
javac -target 1.1
在 JDK 1.8 中生成 45.3 版本,支持 JDK 1.0.2(1995-09-16 发布)、JDK 1.1.*(1997-02 发布)、JDK>=1.2(1998-12 发布).[来源]javac
in JDK 1.0.2 (fromjdk-1_0_2-win32-x86.exe
, run withwine
on Linux) 生成版本45.3.- 对于 k ≥ 2,JDK 版本 1.k 支持 45.0 到 (44+k).0 范围内的类文件格式版本.[来源]
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.- 等
I want to compile my code down to Java version 1.0.
I managed to compile down to 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)
But the target
option does not seem to accept 1.0
:
$ javac -target 1.0 -source 1.2 MyClass.java
javac: invalid target release: 1.0
How do I target JDK 1.0?
I want my .class and .jar file to work as many systems as possible, including very old ones, including JDK 1.0. (I don't have access to a system running JDK 1.0.)
What I've tried so far:
- Compiling with
ecj-3.0.2.jar
: It doesn't support-target 1.0
, the minimum is-target 1.1
. - Compiling with JDK 1.0: I couldn't run it, it wasn't released for Linux.
- Compiling with JDK 1.1: I couldn't run it, it wasn't released for Linux.
- Compiling with JDK 1.2: The Linux i386 javac binary doesn't work, it's giving me Segmentation fault.
- Compiling with JDK 1.3:
javac: invalid target release: 1.0
. - Compiling with JDK 1.4:
javac: invalid target release: 1.0
. - Compiling with JDK 1.5:
javac: invalid target release: 1.0
. This is the first JDK with Linux amd64 binaries. - Compiling with JDK 1.6:
javac: invalid target release: 1.0
. - Compiling with JDK 1.7:
javac: invalid target release: 1.0
. - Compiling with JDK 1.8:
javac: invalid target release: 1.0
. (I got this error first, when I asked the question.)
The reason why I believe that -target 1.0
may work is this answer: https://stackoverflow.com/a/26148408
TL;DR javac -target 1.1
(and not using any classes or methods that were added later) will make it work on JDK >=1.0.2 (released on 1995-09-16). It's not feasible to go back more, because earlier JDKs are not publicly available to try.
The javac -target ...
flag value affects the minor (byte offset 4 and and 5) and major (byte offset 6 and 7) version number stored in the .class file:
javac -target 1.1
in JDK 1.8 generates version 45.3, supported by JDK 1.0.2 (released on 1995-09-16), JDK 1.1.* (released in 1997-02), JDK >=1.2 (released in 1998-12). [source]javac
in JDK 1.0.2 (fromjdk-1_0_2-win32-x86.exe
, run withwine
on Linux) generates version 45.3.- For k ≥ 2, JDK release 1.k supports class file format versions in the range 45.0 through (44+k).0 inclusive. [source]
javac -target 1.2
generates version 46.0, supported by JDK >=1.2.javac -target 1.3
generates version 47.0, supported by JDK >=1.3.javac -target 1.4
generates version 48.0, supported by JDK >=1.4.- etc.
这篇关于如何编译为目标 Java 1.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!