2019/04/20 このエントリーをはてなブックマークに追加 はてなブックマーク - JVM言語とJDKバージョンを今後どう組み合わすのか

JVM言語とJDKバージョンを今後どう組み合わすのか

カテゴリ: , , , , ,

さて、Java is still freeなわけですが
https://medium.com/@javachampions/java-is-still-free-2-0-0-6b9aa8d6d244
https://www.sakatakoichi.com/entry/javaisstillfree

どのJDKをどのバージョンで使うかねぇという話がありますよね。

JDK 8を使い続けるという選択肢もあります。
いろんなベンダーがLTS(long term support)としているJDK 11を使うということも出来ます。
色々考えてみましょう。

※ JDKも色々種類があったりで迷ったんですが、一旦バージョンを区別するだけのためにJDK 8などと表記しています。(Java SEとかいう言葉を使うかどうかも迷った)
※ 分かってる人は読まないで良い内容を書きます。
※ 分かってるけどお時間ある人は、読んで間違いなどあれば指摘もらえると嬉しいです。
※LTS https://en.wikipedia.org/wiki/Long-term_support
※いろんなディストリビューションのJDKがいつまでどのバージョンでサポートするかは各ベンダー次第ですが、大体JDK 11をLTSとしていると思います


Java と JVM言語、どれを使用するにしても気にする大前提は

  • JDK 8で大体のJVM言語は動くと思う(思う)
  • しばらくこのままJDK 8 を使おうという場合は、OpenJDKのディストリがおすすめです
  • バージョン上げるならJDK 11です。2019年04月現在、LTSだから
  • JDK 9はLTSじゃないから忘れましょう(JEPやJSRは忘れないで)
  • JDK 10はLTSじゃないから忘れましょう(JEPやJSRは忘れないで)
  • バージョンアップ(or 何か変更)するということはテストが必要ということです
  • 自分の開発プロジェクトの依存ライブラリ・フレームワークのバージョンごとの対応状況をまず見よう
  • ビルドツールのバージョンごとの対応状況を見よう
  • JAXBのことを考えよう
  • 実行環境のバージョンごとの対応状況(サーバーサイド?Android?デスクトップ?マルチプラットフォーム?とか)を見よう

あたりだと思います。


ScalaのバージョンごとJDKのcompatibilityが公表されています。
このあたりScalaはドキュメントきっちりしていて良い。

https://docs.scala-lang.org/overviews/jdk-compatibility/overview.html

sbtなどに関してはこの記事が今でも有用な気がします。
ScalaコンパイラやsbtとJava 9の対応表

これも重要そうですね。
https://github.com/scala/bug/labels/jdk9
https://github.com/scala/bug/labels/jdk10
https://github.com/scala/bug/labels/jdk11

その他、言語 + AkkaだとかPlay2だとかScalaの各ライブラリやフレームワークの対応状況を見つつということになると思います。


大前提としても前述しましたが、順々にアップデートすれば良さそうですね。

  • Leiningenのバージョン気にする必要がある。
  • 各ライブラリのアップデートをする必要がある。
  • JAXB気にする必要がある。

https://www.deps.co/blog/how-to-upgrade-clojure-projects-to-use-java-11/


この記事に良いこと書いてあって、ライブラリのバージョンを先にあげて、
JDKのバージョンアップ後から上げる方が楽というのは確かに…!!と思いました。

この他の情報はきっと、Clojure詳しい人たちが教えてくれる…!


Groovy 3.0でJDK 11をサポート予定のようです。
しばらくはJDK 8にしといた方が良さそうですね。

https://www.infoq.com/jp/news/2018/08/apache-releases-groovy-2.5
http://groovy.329449.n5.nabble.com/Groovy-and-JDK-11-Compilation-issue-td5752777.html


Kotlinはコンパイラで JDK 6 or JDK 8 コンパチなビルドをするので
後方互換のあるJDK11でも大丈夫というスタンス。 ワイルドだろう?
https://stackoverflow.com/questions/52888341/does-kotlin-support-java-11

サーバーサイド


サーバーサイドだったらSpringとかあたりのフレームワークのバージョンとかを気にした方が良さそうですね。これはJava + Springであっても言えることだと思います。

Android


アンドロイド用途だったらJDK 8のまんまでも良い、というか無難な気はします。zuluやadopt open jdkとかをおすすめします。
Android SDKとの差が少ないという意味で開発しやすそうに思います。
でも開発はOpenJDK 11でするというのも出来るはず。


OpenJDKの選び方としてはこれが参考になるっぽいです。 と、JDKソムリエが言っていたので良い資料のはず。 https://ipc.kyokyo-u.ac.jp/page/696

自分のプロジェクトにあった計画を立てましょう。
(JDK云々の話は、今に始まった話ではなく1年前から公表されてたので、気にしているところはもう計画立ってるはず…)




1 件のコメント:

師子乃 さんのコメント...

こんにちは。

常にバージョンを最新に保ちたいですが、なかなか大変ですね。

コメントを投稿

GA