javaのコンパイル時に-targetを使用してクロスコンパイルをする場合は-bootclasspathでrt.jarを指定する必要がある。

最近まで知りませんでした(しろめ

https://docs.oracle.com/javase/jp/6/technotes/tools/windows/javac.html#crosscomp-example

% javac -target 1.5 -bootclasspath jdk1.5.0\lib\rt.jar \
-extdirs "" OldCode.java


・-target 1.5 オプションにより、1.5 VM と互換性のあるクラスファイルが生成されます。デフォルトでは、javac は JDK 6 用にコンパイルします。


Java プラットフォーム JDK の javac は、デフォルトでは、Java 2 SDK のブートストラップクラスに対してコンパイルを行うので、Java 2 SDK ではなく JDK 1.5 のブートストラップクラスに対してコンパイルを行うように指定する必要があります。これは、-bootclasspath および -extdirs を使って指定します。この指定を行わないと、1.5 VM には存在しない Java 2 プラットフォーム API に対応したコンパイルが行われるため、プログラムの実行時に障害が発生することがあります。