私は少し混乱しています。
Oracleは、Java 8はJava 7(後方)との互換性が高い。しかし、Java 8プログラムJava 7で正常に実行できます(SE/EE)?
ポイント1が真の場合、Java 8アプリケーションがデプロイされ、Java 7サーバーサポート?Tomcat 8またはWildFly?
一般的に、いいえ。
後方互換性とは、Java 7プログラムをJava 8ランタイムで実行でき、その逆ではないことを意味します。
その理由はいくつかあります。
バイトコードはバージョン管理されており、JVMは.classファイルで見つかったバージョンをサポートしているかどうかを確認します。
一部の言語構成体は、以前のバージョンのバイトコードでは表現できません。
新しいJREには新しいクラスとメソッドがあり、古いものとは機能しません。
本当に、本当にしたい場合(ヒント:しません)、次のようなコードを使用して、コンパイラーにソースをJavaの1つのバージョンとして扱い、別のバージョンのバイトコードを出力するように強制できます。
javac -source 1.8 -target 1.7 MyClass.Java
( Mavenでも同じ )、JDK7に対してコンパイルしますが、実際には動作するよりも動作しないことがよくあります。 しないことをお勧めします。
[〜#〜] edit [〜#〜]:JDK 8は明らかにこの正確な組み合わせをサポートしていないため、これは機能しません。他のバージョンの組み合わせでも機能します。
新しいJava古いJVMで動作するプログラムを変換するプログラムもあります。Java 8を5-7に変換するには、 https ://github.com/orfjackal/retrolambda 5未満にするには、次のいずれかを選択できます。 http://en.wikipedia.org/wiki/Java_backporting_tools
これらのハックは、新しいJava 8つのクラスとメソッド、コレクション、ストリーム、時間API、無署名APIなどの関数型プログラミングサポートを含む)を提供しません。それ。
または、Java 8 JEEアプリケーションをアプリケーションサーバーで実行したいので、サーバー全体をJava 8で実行するだけで動作します。
後方互換性の意味
Vice-Versa
ではなく、上位構成で下位構成を実行できます。
まあ、 -target コンパイラオプションがあります。これにより、以前のJavaバージョンのクラスファイル形式をターゲットにできます。ただし、これは修正も検出もしません。ターゲットバージョンの後にJDK APIで導入されたクラスまたはメソッドを使用する場合。
下位互換性がないということは、Java7プログラムがJava8で実行されることを意味しますが、その逆は常にではないtrue
一般に、新しいバージョンは後方互換性を提供する必要があるため、人々は作業を捨てる必要がなく、簡単にアップグレードできます。逆の方法(古いバージョンで実行されている新しいバージョン)は必ずしも真ではありません。新しい実装された機能を使用すると、その機能は明らかに前のバージョンには存在せず、機能しないためです。
よろしく