おそらく非常に古いバージョンのJDKでコンパイルされたJARがあります。JAR を実行するには Microsoft JVM が必要です。この JAR を再コンパイルする場合、どの JDK バージョンをダウンロードして使用する必要がありますか? 考慮しなければならない特別な問題はありますか?
PS 私は JAVA を初めて使用します。下手なプレゼンテーションをお許しください。
JVM には下位互換性があります。したがって、たとえば Java 1.4 用に記述されたコードは、8 番目の JVM でも実行する必要があります。問題は、jar が標準 API の一部ではない Microsoft JVM ネイティブ クラスを使用している可能性があります。この場合、他の JVM で実行することはできません。唯一の方法は、ソースを見つけて変更し、ベンダー固有のクラスを回避することです。これは、SUN の API を使用する場合と同じです。ところで、jar に Microsoft JVM が必要であることはどのようにしてわかりましたか?
ソースコードがあれば、最新の JDK でコンパイルできるはずです。Java の新しいバージョン (assert、enum など) で予約語になった変数名がコードに含まれている場合は、ソース バージョン (1.3、1.4、...、1.7) を指定する必要がある場合があります。-source
コンパイラのオプションを使用して行うことができます。
jar が最初にVisual J++によってビルドされた場合(Microsoft JVM について言及しました)、Oracle JDK でコンパイルできるかどうかはわかりませんが、実際にはコードで何が使用されたかに依存します。
ソース コードがない場合は、JADやJDなどの Java 逆コンパイラを使用してみてください。jar 内のクラス ファイルからソース コードを取得します。逆コンパイラが古いバージョンの Java で作成されたバイトコードをサポートしていることを確認する必要があります。ここで
説明するメソッドを使用して、クラスがコンパイルされた対象の Java バージョンを確認できます。
JAR を実行するために特定の JVM が必要であるとしたら、私は非常に驚かれることでしょう。Java の全体的な哲学は、 write once runAnywhereです。
ソースがまだない場合は、Java Decompiler ( jadなど) を使用して .class ファイルを .java ファイルに逆コンパイルし、最新の JDK を使用して再コンパイルできます。