How to compile to target Java 1.0
In Java 8 the minimum target is JDK 1.1. In Java 9 the minimum target was increased JDK 1.6 (Java 6).
Its a good thing you are trying to make your code compatible with as many java versions as possible, but since Java 6 has been out of service since 2015, really nobody should be trying to write new code that runs with Java 5 or older.
EDIT: Also, in Java 9 they introduced the --release
flag in Javac, which is the preferred option instead of -source
and -target
now. Basically --release 6
is the same thing as -source 1.6 -target 1.6
, but it also has the added benefit of setting your bootclasspath in conjunction with the target release, which is a huge convenience. In practice this protects you from setting --release 6
in the compiler, but accidentally using some new class or language feature from Java 7 or higher.
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.