私のプロジェクトは 1.4.2 JDK でビルドされています。JDK 1.6 でビルドされたサードパーティの jar とやり取りするようになりました。
クライアント クラスの使用中に互換性の問題が発生しています。私のJDKを1.6にアップグレードしたり、1.4.2でサードパーティのjarを再構築したりせずに解決することは可能ですか?
私のプロジェクトは 1.4.2 JDK でビルドされています。JDK 1.6 でビルドされたサードパーティの jar とやり取りするようになりました。
クライアント クラスの使用中に互換性の問題が発生しています。私のJDKを1.6にアップグレードしたり、1.4.2でサードパーティのjarを再構築したりせずに解決することは可能ですか?
java.lang.UnsupportedClassVersionError
例外が発生するため、JDK 1.6 でコンパイルされたクラスを以前の JDK 1.4 で実行することはできません。これは、Java には前方互換性がなく、後方互換性があるためです (仕様を参照)。
それを確認するために、JDK 1.4.2.19 と JDK 1.6.0.23 をインストールし、サンプル アプリケーションを作成しました。
パブリック クラス HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }
JDK 1.6.0.23 でビルド:
../1.6.0.23/bin/javac HelloWorld.java
JDK 1.4.2.19 で実行します。
../1.4.2.19/bin/java HelloWorld
出力:
スレッド「メイン」java.lang で例外が発生しました。UnsupportedClassVersionError : HelloWorld (サポートされていない major.minor バージョン50.0) java.lang.ClassLoader.defineClass0 (ネイティブ メソッド) で java.lang.ClassLoader.defineClass(ClassLoader.java:539) で ...
解決策: JDK 1.6 (および 1.5) で導入されたメソッドを呼び出さない場合は、JDK 1.4 でサードパーティ アプリケーションを再構築してみてください。