質問: 現在、JavaSE8, JavaEE7を前提に、Wildfly10で動作するJavaEEアプリケーションを開発しています。 先日、JavaSE9がリリースされたので、移行を検討しているのですが、この辺りの実行環境のバージョンに関する基本知識が足りていません。 次のような疑問が浮かんではいるので、教えていただきたいのですが、何か根本的に勘違いしているが故の誤った疑問もありそうに思えています。 1. JREのversion9はまだ無いのか? JDK9は既にダウンロードできるようですが、JRE9のリリースはまたタイミングが異なるのでしょうか? 現在作っているアプリケーションの動作環境に関して「勝手にJRE9をインストールしないで」とアナウンスしようと思いましたが、まだversion 8しかない様子なので、困惑しています。 **追記:JRE単体でのダウンロードでは、version 9のリリースはまだなのでしょうか?** 2. JRE9環境下で、Wildfly10は動くのか? もしJRE9がリリースされインストールできたとして、Wildfly10自体は動作保証がされているのでしょうか? 3. JavaEE7はJavaSE8を前提としているのか? JavaSE9を使いたいなら、それに対応するであろうJavaEE8を待つ必要がありますか? 4. JRE8環境/Wildfly10環境下で、JDK9を使って開発したアプリケーションは動くのか? テストサーバの環境は変えずにJava9の機能を試したいな、とも思っているのですが。 例えばmodule関係の機能とか、Optional#ifPresentOrElseも便利そうだとか・・・ .NETとC#で言えば、言語機能として「var」(型推論)が追加されたとしても、それはコンパイラの管轄であり、生成される中間コード上では型が確定していますから、以前のCLRでも実行可能ですよね。 ※コンパイル時にターゲットフレームワークバージョンの指定がありますが 一概に動く・動かないと言えるものではないでしょうが、.NETとC#と同じような考え方がJavaの世界でもできるのでしょうか? コンパイラが対応していれば良いもの、実行環境も変えなければ動かないもの、・・・ Optional#ifPresentOrElseとかはJREの中にあるので、実行環境を変えないと実行時エラーでしょうか?
回答: > > 1. JREのversion9はまだ無いのか? > > > JREというのは一般に`java`コマンドのことなので、JDKにはJREが含まれています。 > > 2. JRE9環境下で、Wildfly10は動くのか? > > > WildFly 10はJava 9の正式リリースよりずっと前にリリースされているので、GAリリース時点では正式な動作保証はされていないでしょう。ただし、このリリースノートを見る限り、当時の開発版Java 9では、WildFly 10は問題なく動作していたようです。 現在CR1のWildFly 11なら、GAリリース時点でJava 9の動作保証はされるでしょう。 > > 3. JavaEE7はJavaSE8を前提としているのか? > > > Java SEは後方互換性が維持されているはずなので、EE 7がSE 9で動かなくなるということはないと思いますが、そもそもJava EEを使いたいということは、それをサポートしている特定のアプリケーションサーバを使いたい(WildFlyなど)ということだと思います。そのアプリケーションサーバでJava 9のサポートが表明されていれば、その上でJava EE 7を使うのはまったく問題ないでしょう。 > > 4. JRE8環境/Wildfly10環境下で、JDK9を使って開発したアプリケーションは動くのか? > > > JDK 9でコンパイルしたクラスファイルを、JRE 8で実行しようとすると、クラスファイルのバージョンが違うというエラーが出て動かないでしょう。それ以外にも、Java 9で新たに導入されたクラスやメソッドを使えば、当然それらはJRE 8には存在しないので、動作しないはずです。