0

おそらく非常に古いバージョンのJDKでコンパイルされたJARがあります。JAR を実行するには Microsoft JVM が必要です。この JAR を再コンパイルする場合、どの JDK バージョンをダウンロードして使用する必要がありますか? 考慮しなければならない特別な問題はありますか?

PS 私は JAVA を初めて使用します。下手なプレゼンテーションをお許しください。

4

3 に答える 3

1

JVM には下位互換性があります。したがって、たとえば Java 1.4 用に記述されたコードは、8 番目の JVM でも実行する必要があります。問題は、jar が標準 API の一部ではない Microsoft JVM ネイティブ クラスを使用している可能性があります。この場合、他の JVM で実行することはできません。唯一の方法は、ソースを見つけて変更し、ベンダー固有のクラスを回避することです。これは、SUN の API を使用する場合と同じです。ところで、jar に Microsoft JVM が必要であることはどのようにしてわかりましたか?

于 2013-11-12T14:02:54.617 に答える
1

ソースコードがあれば、最新の JDK でコンパイルできるはずです。Java の新しいバージョン (assert、enum など) で予約語になった変数名がコードに含まれている場合は、ソース バージョン (1.3、1.4、...、1.7) を指定する必要がある場合があります。-sourceコンパイラのオプションを使用して行うことができます。
jar が最初にVisual J++によってビルドされた場合(Microsoft JVM について言及しました)、Oracle JDK でコンパイルできるかどうかはわかりませんが、実際にはコードで何が使用されたかに依存します。
ソース コードがない場合は、JADJDなどの Java 逆コンパイラを使用してみてください。jar 内のクラス ファイルからソース コードを取得します。逆コンパイラが古いバージョンの Java で作成されたバイトコードをサポートしていることを確認する必要があります。ここで
説明するメソッドを使用して、クラスがコンパイルされた対象の Java バージョンを確認できます。

于 2013-11-12T11:53:37.037 に答える
1

JAR を実行するために特定の JVM が必要であるとしたら、私は非常に驚かれることでしょう。Java の全体的な哲学は、 write once runAnywhereです。

ソースがまだない場合は、Java Decompiler ( jadなど) を使用して .class ファイルを .java ファイルに逆コンパイルし、最新の JDK を使用して再コンパイルできます。

于 2013-11-12T11:32:21.420 に答える