如何编译到目标Java 1.0

问题描述 投票:7回答:2

我想将我的代码编译为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。 (我无法访问运行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。这是第一个使用Linux amd64二进制文件的JDK。
  • 使用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可能有效的原因是这个答案:https://stackoverflow.com/a/26148408

java javac
2个回答
6
投票

在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是一回事,但它还具有将bootclasspath与目标版本一起设置的额外好处,这是一个巨大的便利。在实践中,这可以防止您在编译器中设置--release 6,但意外地使用Java 7或更高版本中的某些新类或语言功能。


1
投票

TL; DR javac -target 1.1(并且不使用稍后添加的任何类或方法)将使其适用于JDK> = 1.0.2(在1995-09-16发布)。回去更多是不可行的,因为早期的JDK不能公开尝试。

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

  • JDK 1.8中的javac -target 1.1生成版本45.3,由JDK 1.0.2(1995-09-16发布),JDK 1.1。*(1997-02发布),JDK> = 1.2(1998-12发布)支持。 [source]
  • JDK 1.0.2中的qazxsw poi(来自qazxsw poi,在Linux上运行qazxsw poi)生成版本45.3。
  • 对于k≥2,JDK版本1.k支持45.0到(44 + k).0范围内的类文件格式版本。 [javac]
  • jdk-1_0_2-win32-x86.exe生成版本46.0,由JDK> = 1.2支持。
  • wine生成版本47.0,由JDK> = 1.3支持。
  • source生成版本48.0,由JDK> = 1.4支持。
  • 等等
© www.soinside.com 2019 - 2024. All rights reserved.