私の質問は、Java JDK と JRE を実行するために互換性が必要かどうかです。
つまり、JDK バージョン 8 を使用して作成された Java アプリケーションは、将来、現在の JRE で動作しますか?
私の質問は、Java JDK と JRE を実行するために互換性が必要かどうかです。
つまり、JDK バージョン 8 を使用して作成された Java アプリケーションは、将来、現在の JRE で動作しますか?
コンパイル時にクロスコンパイルオプションを使用することができます。そうすることで、Java 1.1 と互換性のある SDK 8 でコードをコンパイルできるようになります。1.1 ではあまり高度なコードではありませんが、動作します。
短い答えはいいえです。
JDK 8 でアプリケーションを開発し、JRE 7 で実行すると、UnsupportedClassVersionErrorが発生します。
この質問は 2 つの部分で構成されています。
JRE は Java ランタイム環境の頭字語です。JDK は Java Development Kit の頭字語で、Java プログラムの開発に使用する一連のツールです。JDK には、完全な JRE も含まれています。一般に、この 2 つの間に互換性の問題はありません。ただし、JDK でのみ使用可能なライブラリ (コード生成や tools.jar など) を使用しないように注意する必要がある場合があります。
Java 自体は、前方互換性のあるバイトコードにコンパイルされます。つまり、任意の Java バージョンのバイトコードを使用して、新しいバージョンで実行できます。通常、他の方法は機能せず、クラス ファイルのバージョンを使用してチェックされます ("java.lang.UnsupportedClassVersionError: Test : Unsupported major.minor version 51.0")。
次に、コア ライブラリを含む Java ライブラリがあります。これまでのところ、それらから何も削除されていないため、前方互換性があります。これはおそらく Java 9 で変更され、通常は使用されない非常に小さなライブラリ関数が削除されます。
下位互換性に関しては、Java コンパイラを設定して古いバージョンのバイトコードを生成することで可能です。Java 8 までは、コンパイラは常に最後の 2 つのメジャー バージョンのバイトコードも生成できました。ただし、Java 8 ソースを Java 6 に正常にコンパイルしても、実行できない場合があります。これは、never Java でのみ使用可能なライブラリを使用する場合です。このような場合には、たとえば、古いバージョンに対してコンパイルするときに、そのバージョンに存在するライブラリのみを実際に使用することを確認する maven animalniffer プラグインがあります。