Javaって、もう終わっちゃったんですか?

『サポートが有償になった』とか『Java 11で、パッケージが無くなった』とか、なんやかんやあったので、色々と混乱してしまいました。

当社でも、Javaのコンテンツを公開しているので、Javaが終わってしまっては元も子もありません。

今後どうすれば良さげなのか、簡単にまとめてみたので、参考にしてください。

制限事項

このコンテンツに書かれている内容は、インターネット上に公開されている情報や、Oracleその他が提供しているライセンス情報を、機械翻訳した結果等を元にしています。

記載内容には注意を払っているつもりですが、正しいことを保証するものではありません。

特にライセンス関係は、違反をすると重大な結果を招く可能性も有るので、充分に注意してください。

OracleのJava

どんどんバージョンが上がっていくんですけど

まあ最近の流行りというか、どんどんバージョンを上げて、新しい機能を追加していくというのは、様々なプロダクトで取り入れられています。

Linuxのディストロビューションには、ローリング・リリースという考え方が昔からありましたが、スマホのOSやWindowsもこれを取り入れ、新機能をガンガン宣伝できるようになりました。

Javaもこれに乗っかったわけですが、同時にサポートのポリシーも大きく変わってしまいました。

半年ごとに新しいバージョンが出て、サポート期間は次のバージョンが出た月の終わりまでとなります。

但し、3年毎に長期サポート(Long-Term-Support:LTS)リリースが出る予定です。

現状は、Java 8とJava 11がLTSで、Java 8は2025年3月、Java 11は2026年9月までサポートが受けられます。

多分こんな感じ。まだ出ていないJava13以降は、単なる予想ですが。

2017201820192020202120222023202420252026202720282029
Java 82014/3
Java 92017/9
Java 102018/3
Java 112018/9
Java 122019/3
Java 132019/9
Java 142020/3
Java 152020/9
Java 162021/3
Java 172021/9

ただじゃないのでは?

Java 8は、2020年12月末まで、個人ユーザ(商用に使用しないユーザ)向けに、アップデートが提供されるようです。商用ユーザ向けの無償サポートは、2019年1月末で終了しています。

Java 11は、そもそも個人ユーザや開発・出版(出版物に同梱する)でしか使用できないので、商用には使用できません。

商用のサポートは、全て有償サポートとなります。

32ビット版は?

Java 9以降は、64ビット版しか提供されません。

ただで使いたい

まあ、そう言い切ってしまうのもどうかと思いますが...

元々、Oracleが提供しているJDKは、オープンソースコミュニティが開発しているOpenJDKを元にしています。

OpenJDK自体からは、OracleのJDKと同様のサポートしか受けられませんが、OpenJDKを元にしてJDKを提供しているベンダーに対し、セキュリティパッチ等のサポートを行う努力をすることを、Oracleも表明しています(なんとも微妙な言い回しで...)。

Linuxのディストロビューションは、多分大丈夫

RedHatは、いち早く長期サポートを発表していました(そもそもOSが無料ではないので、ただで使えるわけではありませんが)。

筆者はDebianを使用していますが、Oracleのサイトからはダウンロードできないバージョンが既に提供されているので、コミュニティー間の連携は今の所うまくいっているようです。

問題はWindows?

AdoptOpenJDKが、OpenJDKのバイナリを提供してくれています。

AdoptOpenJDKは、大手のベンダー(IBMやMicrosoft)を含むコミュニティーなので(RedHatもですが、いつの間にかIBMになってしまいました)、まあある程度の影響力は期待できます。

Java 8は2023/9、Java 11は2022/9までサポートしてくれるようです。

また、32ビット版も提供してくれています。macOS版もあります。

将来的に、ほんとに大丈夫なのか?

それは、分かりません。

AdoptOpenJDKのサイトに、以下のようにありました。

As a general philosophy, AdoptOpenJDK will continue to build binaries for LTS releases as long as the corresponding upstream source is actively maintained.
<機械翻訳>
一般的な考え方として、AdoptOpenJDKは対応するアップストリームソースが積極的に維持されている限り、LTSリリース用のバイナリを構築し続けます。

『対応するアップストリームソースが積極的に維持されている限り、』というのは、上流のコミュニティーがうまくいっている限りと読めなくもないので、破綻なくうまくやってくれることを祈るばかりです。

実際のところ、エンドユーザや開発者が離れてしまえば、Oracleも損害を受けるでしょうからね。

最悪、Javaに代わる言語は?

C言語、個人的には(^o^)

だめだめプログラマが作ったプログラムは、落っこちてそれ以上悪さしないし。

それ以外

Java 11に、javax.xml.bindパッケージが無い!

亡くなりました。無くなりました。

これまでにないくらい、いろいろなものがゴッソリ無くなりました。

多くのパッケージ(モジュール)が削除された

Java EEやCORBA関連のパッケージ(モジュール)が、多く削除されました。

特に、javax.xml.bindパッケージは、よく使う機能だったので、結構困ります。

いろいろなプロダクトの、Java 11サポートが遅れていた大きな原因だったようです。

代替策は、該当のライブラリ(jar)を使用することです。

Java Deployment機能が削除された

Java PluginとJava WebStartも無くなりました。

代替策には、IcedTea-Webという、オープンソースのプロジェクトがあります。

但し、NPAPI pluginsをサポートするWebブラウザが、2019/4現在ほとんど存在していない。

Java FXが削除された

同梱されなくなりました。

OpenJFXとして、オープンソースのプロジェクトとなりました。

しかし、最近のHTML5などによる、Webアプリケーションの実用性を考えると、本当に必要なのか難しいところです。

Java EEも終わった?

OracleからEclipse Foundationに寄贈されて、「Jakarta EE」となりました(ただ、プロジェクト的には「Eclipse EE4J」と呼ばれてます)。

リファレンス実装だった「Glassfis」は「Eclipse Glassfish」として、こちらで公開されています。

この関係で、Mavenのセントラルリポジトリでは、グループIDやアーティファクトIDが変更されているようなので、使っている人は注意が必要です。

JREが無い!?!!

Java 9以降では、モジュールという考え方が取り入れました。

このおかげで、必要最小限のモジュールで構成されたJREを作ることができるようになりました。

とても解りやすくまとめてくれているサイトがあったので、リンクしておきます。

アプリケーション配布用に小さなJREを作る

上記サイトでは、jdkをOracleからダウンロードしていますが、AdoptOpenJDKからダウンロードしたOpenJDKにも、同様のコマンドがあるので実行できます。

ただ、どうやって最新の状態を保つかという問題は残りますが。

Eclipseの最新に、32ビット版が無い!!!!

そうなんですよ(このコンテンツの内容には、直接関係ないけど)。

Java 11に完全対応した2018-12以降は、64ビット版しかリリースされないようなので、非常に困ってます。

代替策は、OSを64ビットにするしか...

Windows10+AdoptOpenJDK+Eclipseが起動しない!!

理由がわからん!?!!

「Java was started but returned exit code=1」で、例のダイアログが表示される。

当然、eclipse.iniに-vmで、jdkのパスは設定されているし、それが正しいのも確認済み。

コマンドラインで、java -versionが正しくバージョンを表示することも確認済み。

環境変数に、PATHもJAVA_HOMEも設定済み。

いろいろな環境で開発してきたけど、こんなのは初めて。

eclipseもAdoptOpenJDKも、zipをダウンロードして解凍しただけ。

ググってみると、-vmにjvm.dllを指定しろという記述が見受けられる。実際にやってみるとダイアログすら表示されないのだが、この指定で動いている環境があるということは、何らかの方法でeclipseがjavaw.exeの場所を見つけているということ。

実際のところ、Linuxの環境では、eclipse.iniに-vmの指定などしなくても、なんの問題もなく動くし。

で、普通にOracleのJDK(jre)をインストールすると、Windows\system32にjava.exeとjavaw.exeがインストールされることを思い出して、jre\bin配下のjava.exeとjavaw.exeをWindows\system32にコピー。

PATHに%JAVA_HOME%\jre\bin\serverを追加して起動してみると、なんと起動成功。

PATHにserverディレクトリの追加が必要がどうかは確認していないけど、まあ動いているのでそっとしておきましょう。

最初から、msiを落としてきてインストールすればよかったんでしょう。