90

これはばかげた質問かもしれませんが、Java バージョン 1.6および1.7でコンパイルされた Java プログラムと関連ライブラリ(私は 1.7 を使用してコンパイルしていますが、一部のライブラリは 1.6 を使用してコンパイルされています) を実行し、プログラム全体を 1.7 JRE で実行すると、問題が発生しますか? ?

4

2 に答える 2

105

すでに答えたように、あなたはほとんど安全で、ほとんどの製品とサードパーティのライブラリは簡単に動作します. ただし、バイナリの非互換性(古い JDK を使用してコンパイルされたクラス ファイルが新しい JVM で実行できない場合) が JDK バージョン間で導入された非常にまれなケースが存在します。

バージョン間の Oracle Java 非互換性の公式リスト:

互換性ツール

JDK 9に同梱されている jdeprscanというツールがあり、互換性を検証し、コード内で使用されなくなった API を一覧表示し、代替案 (!) を提案します。ターゲットのJDK バージョン( JDK 9、8、7 および6機能) を指定すると、ターゲット バージョンに固有の非互換性が一覧表示されます

ライブラリの場合の追加コメント:

合理的な経験則は、ソフトウェアが対象とする JRE バージョンに対してライブラリの最新の安定リリース バージョンを使用することです。もちろん、このルールからは多くの例外が見つかりますが、一般に、一般に公開されているライブラリの安定性は時間とともに向上します。

当然、依存関係のバージョンを変更するときは、 API の互換性バージョン管理を考慮する必要があります。

繰り返しになりますが、最も一般的な依存関係には、そのような情報が利用できる Web ページがあります。

ただし、もう少しあいまいなものを使用している場合は、依存関係内でコンパイルされたクラスがどの JRE であったかを識別できます。

これは、クラスのバージョンを確認する方法に関する優れた回答です。最初に JAR ファイルを解凍する必要がある場合があります。

于 2015-02-19T11:28:57.240 に答える
92

Java 1 のほぼすべてのコードを Java 8 で実行できます。Java 6 コードが Java 8 ランタイムで実行されない理由はありません。

興味深いのは、たとえば Java 1.4 で作成されたアプリケーションの場合、それ以降のランタイムで実行すると速度が向上することです。これは、Java が「Java」として知られる言語だけでなく、JVM (Java 仮想マシン) も常に進化しているためです。最新の JVM で期待されるように、10 年以上前のソース コードがまだ機能しています。

たとえば、Java 5 VM をターゲットにしたい場合は、Java 8 SDK ツールを使用してそれを行うことができます。バージョン 5 VM がバージョン 8 VM のすべての機能をサポートしていない可能性があることを念頭に置いている限り、サポートするターゲット VM を最終的に指定できます。

Java 5 で記述したコードを新しい Java 8 ランタイムに対してテストしたところ、すべてが期待どおりに機能するため、現在はより強力な言語とランタイムを使用していますが、過去の投資を引き続き使用できます。それだけで、Java は企業にとって優れた開発の選択肢となります。

于 2012-06-05T10:52:36.373 に答える