如何针对Java 1.0进行编译

时间:2019-02-10 20:12:06

标签: java javac

我想将代码编译为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进行编译:{{1​​}}。
  • 使用JDK 1.4进行编译:{{1​​}}。
  • 使用JDK 1.5进行编译:{{1​​}}。这是第一个使用Linux amd64二进制文件的JDK。
  • 使用JDK 1.6进行编译:{{1​​}}。
  • 使用JDK 1.7进行编译:{{1​​}}。
  • 使用JDK 1.8进行编译:{{1​​}}。 (当我问这个问题时,我首先遇到了这个错误。)

我认为javac: invalid target release: 1.0可行的原因是此答案:https://stackoverflow.com/a/26148408

2 个答案:

答案 0 :(得分:6)

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

您正试图使代码与尽可能多的Java版本兼容,这是一件好事,但是由于Java 6自2015年以来已经停用,因此实际上没有人应该尝试编写可与Java 5或Java一起运行的新代码。较老。

编辑:同样,他们在Java 9中在Javac中引入了--release标志,这是现在而不是-source-target的首选选项。基本上--release 6-source 1.6 -target 1.6是一样的东西,但是它还具有将bootclasspath设置为与目标发行版一起使用的额外好处,这非常方便。实际上,这可以防止您在编译器中设置--release 6,但会意外地使用Java 7或更高版本的某些新类或语言功能。

答案 1 :(得分:1)

TL; DR javac -target 1.1(并且不使用以后添加的任何类或方法)将使其在JDK> = 1.0.2(1995年9月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中的
  • javac(来自jdk-1_0_2-win32-x86.exe,在Linux上以wine运行)生成版本45.3。
  • 对于k≥2,JDK版本1.k支持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的支持。