Javaのインストール2023年版

ちょっとJavaのインストールについて調べてみました2023年版。
Javaにはディストリビューションがたくさんあるので、目につくインストーラーをWindowsで全部ためしてみました。
初心者が勉強するためにJavaをインストールするというときにどれを使うのが手軽か確認するというのが主な目的です。

いろいろあるので、結論を先に書いておくと次のようになります。

いまPATHの設定が必要なJDKインストーラはない。Oracle以外ではJAVA_HOMEも設定できる。
一番楽なJavaインストール手順は、「Adoptium」で検索して最初のサイトを開いてダウンロードボタンを押して取得したインストーラを起動、JAVA_HOMEの設定を指定してインストール継続、という感じになります

2023年のJavaの勉強は「プロになるJava」で!

※検索ワードを示してますが、時期や検索エンジンによっては違う結果が出る可能性があります。
※ バージョン取得がきまぐれに-versionだったり--versionだったりしますが深い意味はありません。

Oracle JDK

まずはOracleJDK
いまはOracle以外にもJDKディストリビューションを出すようになったので、Oracle社のサイトからダウンロードできるJDKを「Oracle JDK」と呼ぶようになったというレトロニムで、Oracle自身がOracle JDKと呼んでるわけではないですね。
有償化が騒がれたりもしましたが、とりあえずデスクトップ用途では無償で使えることになって、騒ぎもおさまりました。
ただし、サーバーとして外部に公開して不特定が使うという場合には、個人でも有償ライセンスが必要なので注意してください。
サーバーとして外部公開する場合にはTemurinなどのディストリビューションを使うほうがいいです。ということで、学習の際も最初からTemurinなど別のディストリビューションを使うのが無難です。

JDK Download」で検索するとトップに出ます。「Java Download」だとJava 8 JREダウンロードサイトにたどりついてしまいます。

JRE」は元々はアプレットプラグインなどブラウザ連携を含んだものだったので、そういったブラウザ連携機能の廃止と同時に公式にはリリースされなくなっています。いまはJVM+APIだけのパッケージをJREとして配布するディストリビューションがあるという感じ。
自分のプログラムを配布するときは、jlinkコマンドで必要なモジュールだけをパッケージしたカスタムランタイムを一緒に配布したり、jpackageコマンドでそういうラインタイムを含んだ実行イメージやインストーラを作って配布という方針になっていますね。

Oracle JDKダウンロードサイトはこちら。
https://www.oracle.com/jp/java/technologies/downloads/

最新版と最新LTSが選択できます。OSやアーキテクチャは自分で選ぶ必要がありますね。

jdk-19_windows-x64_bin.msiをダウンロード。
今回はインストーラでやっていくのですが、msiとexeがある場合にはインストーラ専用形式であるmsiを選ぶほうがいいです。インストールとして許された操作以外を行わないことがある程度保証されるし、ダウンロードサイズも少し小さいので。

開くとインストールが始まります。特に設定が必要な項目はないのでNextを押していくと大丈夫です。

PATHは通ってるので、そのままjava -versionJavaのバージョンが出ます。JAVA_HOMEは設定されません。

Oracle JDKインストーラではPATHJava 15から設定されるようになっているので、いまだにPATHが必要と説明しているサイトは情報が古いです。

いまどれだけJAVA_HOMEの設定が必要なのか?っていう疑問はあるものの、インストーラJAVA_HOMEを設定できないのはOracle JDKだけなので、設定が必要なら自分で環境変数を設定するか、Oracle JDK以外のインストーラを使うかになりますね。

ちなみにjava -versionとやってjava versionが表示されるのはOracle JDKのみです。ほかはopenjdk versionなどJavaという用語を使わない表示になります。

あと、ほかのディストリビューションでも同じですが、macOSではArmかx64も正しく選ぶ必要があるので気をつけてください。Liberica JDKMicrosoft Build of OpenJDK 以外はarm版Windows用バイナリが用意されていません。

Temurin by Adoptium

特になにも条件がなくて単にJavaを動かしたいというときにおすすめしているのがAdoptiumのTemurinです。 「Adoptium」で検索すると出ます。「Temurin」でも大丈夫。

ただしくはEclipse Temurinですが、Eclipse IDE専用みたいな感じがしてしまうので、AdoptiumとかTemurinとか呼んでます。 そのためか、トップページにはEclipseと大きく書いてないですね。
https://adoptium.net/

アクセスした環境を判定して自動的に最適なLTSバイナリを選んでくれるので、目につくダウンロードボタンを押すだけでいいのも推しポイントです。

Java 19のようにLTSじゃないバージョンをインストールしたい場合には「Other platforms and versions」から飛んでバージョンなどを選択する必要がありますが、ここではOSなども設定する必要があります。デフォルトを設定してくれてればいいのに。

まあ、ここではLTSでいいという方針で行くので、トップページのダウンロードボタンを押してOpenJDK17U-jdk_x64_windows_hotspot_17.0.5_8.msiをダウンロード。

インストーラが起動します。

Nextボタンを押すとセットアップ画面が表示されて、ここでJAVA_HOMEなどの設定を指定することができます。「Will be installed...」をインストール時にJAVA_HOMEが設定されます。

PATHJAVA_HOMEも設定されてますね。

なので、いま一番楽なJavaインストール手順は、「Adoptium」で検索して最初のサイトを開いてダウンロードボタンを押して取得したインストーラを起動、JAVA_HOMEの設定を指定してインストール継続、という感じになりますね。

Amazon Corretto

Temurinの説明で「特になにも条件がなくて」と書きましたが、代表的な条件に「AWSAmazon Linux上で動かす」のようにクラウドサービスとそのサービス提供のLinuxで動かすというものがあります。その場合に、そのクラウド提供者がJDKディストリビューションを出しているのであれば、そのJDKを使うのが無難です。Oracle Cloudを使う場合にはOracle JDKのライセンスもついてたりしますね。
Amazonの場合はCorrettoというディストリビューションを出しているので、これを使うことも多いと思います。もちろん、他のディストリビューションでも動きますが、Corettoなどを使うとクラウドサービス用に動作検証や最適化がされている可能性がありますね。

「Corretto」で検索すると出てくるのだけど、rをふたつ書くのと最後のoも忘れて「corettt」としたり最後をeにして「corette」にするとぜんぜんひっかからなくなるので「Amazon Corretto」で検索しましょう。
https://aws.amazon.com/jp/corretto/

バージョンを選ぶとパッケージいちらんが表示されるので、その中から自力でみつける必要があります。
まあ、Corretto使う人はコマンドラインでインストールするやろみたいな考えなのだと思います。

ここからamazon-corretto-19.0.1.10.1-windows-x64.msiをダウンロード。

インストーラが起動します。

「Setup Environment」の中の「Setup Environment Variables」を選択しておくとPATHJAVA_HOMEが設定されます。デフォルトで設定されるので特にいじる必要もないです。

パスがとおってJAVA_HOMEも設定されています。

Azul Zulu

以前はOracle JDK以外のJDKといえばAzulという感じだったのですが他がどんどんディストリビューションを出してきたので影が薄くなりましたね・・・
「Zulu Download」で検索すると出てきます。
独自のJITを持っていたりするので面白いのですが、ここではそういった特別な機能を含まず無償で使えるZuluを使います。
https://www.azul.com/downloads/

スクロールすると「Download Now」というボタンがあるので、左端のZuluの列のものを押します。
バージョンやOSなどは自分で選ぶ必要があります。

JDKだけではなくJREJavaFX付のパッケージを選ぶこともできます。JREに実際に何が含まれているかは要確認

zulu19.30.11-ca-jdk19.0.1-win_x64.msiをダウンロード

インストーラが起動します。

JAVA_HOMEの設定を指定する画面がでます。デフォルトでは設定されないのでTemurinと同様に指定する必要があります。

インストールが終わるとPATHJAVA_HOMEも設定されました。

Liberica JDK

Liberica JDKはBellSoftの提供するJDKです。
「Liberica」で検索すると出てきますが、「Download for Free」を押して「Download」を押すと次の画面が出てきます。
https://bell-sw.com/pages/downloads/#/java-19-current

最初はJDK 8 LTSが選択されているので、所望のバージョンを改めて選択する必要があります。 そうするとあとは「Windows」のダウンロードボタンを押すとダウンロードが始まります。
bellsoft-jdk19.0.1+11-windows-amd64.msiをダウンロードします。

起動するとインストールが始まります。

環境変数などを選ぶ画面が出ますが、デフォルトですべて選択されているので特に変更する必要はありません。

PATHJAVA_HOMEも設定されています。

Microsoft Build of OpenJDK

名前のとおり、MicrosoftがビルドしたOpenJDKです。
Azureを使うと最初から入っているかも。
Microsoft JDK」で検索すると出てきます。
https://www.microsoft.com/openjdk

独自にエスケープ解析が実装されたりもしています。
https://devblogs.microsoft.com/java/microsoft-build-of-openjdk-october-2022-psu-release/

「ダウンロード」ボタンを押すとパッケージ一覧が出ます。LTSバージョンしかリリースしないようですね。
フィルターなどはないので、自分でファイルを選びます。

microsoft-jdk-17.0.5-windows-x64.msiをダウンロードします。

インストールが始まります。

JAVA_HOMEはデフォルトでは設定されないので、指定する必要があります。

PATHJAVA_HOMEも設定されました。

SapMachine

さて、インストーラー最後はSapMachineです。名前のとおりSAPがビルドしたOpenJDKです。
「sap jdk」などでも出ると思いますが「sapmachine」で検索するのが確実
https://sap.github.io/SapMachine/

スクロールすると環境が指定された状態になっているので「Download」ボタンを押すだけです。

sapmachine-jdk-19.0.1_windows-x64_bin.msiをダウンロード、なのですが、なにやら危険なファイル認定されてしまう。署名がされてないのかな。

「・・・」を押してメニューから「保存」を選びます。

そして「詳細表示」をクリック

「保持する」を押せば、ようやくファイルが使えるようになります。

これで「ファイルを開く」とインストーラが起動するのだけど

やっぱり保護されてしまうので、「詳細情報」を押す

で、「実行」を押すとようやくインストーラが起動します。

インストーラが起動

ライセンス確認のあと環境選択が出ますが、環境変数まわりは全部デフォルトでオフです。

「Optional Features」で「Entire feature will be installed on local hard drive」を選ぶと全部が設定されます。

インストールすると、PATHJAVA_HOMEも設定されます。

しかし、さすがにこれを人にはオススメできないですね。

OpenJDK

ちなみに、LTSではない最新版を試すのであれば、OpenJDKサイトからzipなどのアーカイブをダウンロードして展開するのが楽ですね。
最新版を試したい人ならパスの設定もわかるだろうし、そもそも試すだけならjavaコマンドのフルパス指定で問題ないので。開発もIDE使うだろうから、IDEにパスの設定を追加すればいいですからね。
https://jdk.java.net/19/

SDKMAN!

さて、いろんなバージョンを使うからインストーラなんか使ってられないという人もいるんじゃないかと思います。まあだいたいはzipダウンロードで展開しておけばどうにかなると思いますが、コマンドライン作業が多いのでパスもちゃんと切り替えたいということもあるでしょう。
そういうときにはSDKMAN!でインストールするのがいいですね。
https://sdkman.io/

MacLinuxでは、サイトに書いてあるとおりcurl -s "https://get.sdkman.io" | bashを実行すればインストールされます。

Windowsの場合、コマンドプロンプトでは使えないので、CygwinなどのUNIX系ターミナルが必要です。
https://www.cygwin.com/install.html

setup-x86_64.exeをダウンロードして起動します。このexeはあとでcygwinにパッケージをインストールするときにも必要になるので、どっかに置いておきましょう。

ダウンロードサイトを選べと出ます。どこでもいいと思うのだけど、jaistとかを選んでます。

パッケージを選ぶ画面が出ますが、zipとunzipがないとSDKMAN!のインストールに失敗し、curlがないと実行に失敗します。

特にcurlを忘れるとそれっぽく動くのに怒られるのでハマります。
https://nowokay.hatenablog.com/entry/2019/06/12/035324

まあ、Cygwinがインストールできたり、LinuxMacの人はターミナル開いてSDKMAN!のサイトに書いてあるスクリプトを動かしましょう。

ちゃんとインストールできると「Enjoy!」って出るのでエンジョイしましょう。

ターミナル再起動するか、メッセージにあるsource "/home/WDAGUtilityAccount/.sdkman/bin/sdkman-init.sh"を実行するとsdkコマンドが使えるようになります。WDAGUtilityAccount部分はログインアカウントになります。

sdk list javaとするとインストール可能なJava一覧が出てきます。

sdk install java 19.0.1-openとするとOpenJDKがインストールされます。この19.0.1-openの部分には先ほどの一覧のIdentifierの欄の文字列を指定します。

この時点でPATHは通ってますが、JAVA_HOMEは設定されていません。

sdk use java 19.0.1-openとするか、ターミナルを起動しなおすとJAVA_HOMEも設定されます。

LinuxMacはともかく、Windows環境でCygwinいれてまでSDKMAN!を使う必要があるかという話になりますが、結局SDKMAN!でJDKを切り替えたいのはコマンドラインでいろいろやる場合なので、JDK切り替えるツールが欲しいくらいコマンドラインでいろいろやるならCygwin使ってもいいんではないかなという気がします。

winget

ぶこめにあって素敵そうなので試そうと思ったんだけどサンドボックスで動かせなかったので保留

OpenJ9 / Semeru Runtime

IBMがJ9として開発していたJVMEclipseに寄贈されてオープンソースになっていました。愛してる人もいるだろうと思って追記
Adoptiumの前身、AdoptOpenJDKではJ9版もリリースしてたなぁと思ってAdoptium見てもHotSpot版しかなく、SDKMAN!にあったなぁと思って確認してもなく、そして、公式サイトをみてもダウンロードリンクがない、どこからもダウンロードできなさそうなプロダクトになっていました・・・
https://www.eclipse.org/openj9/

ということで、Semeru Runtimeという名前になっているようです。
「Semeru」だけだと火山が出てきたりするので「IBM Semeru」や「Semeru Download」で検索するのがいいですね。 OSは自分で選ぶ必要があります。Java 18はあるけどJava 19はない模様
https://developer.ibm.com/languages/java/semeru-runtimes/downloads/

ibm-semeru-open-jdk_x64_windows_17.0.5_8_openj9-0.35.0.msiをダウンロードします。

インストーラが起動しますね。

そして、JAVA_HOMEはデフォルトでは設定されないので指定が必要です。

PATHJAVA_HOMEも設定されていますね。そして、他のJDKとは違う表示が。

OpenJ9はJVMの名前。ふつうのJDKJVMはHotSpotと呼ばれます。
OMRはGraalVMのTruffleみたいな、スクリプト言語の開発のためのランタイムだと思います。 https://www.infoq.com/jp/news/2016/04/ibm-creates-omr/

JCLはなんだろう?Job Control Language?

Red Hat Build of OpenJDK

Red HatはOpenJDKの開発においてOracleについで多くのソースをコミットしている企業なので、当然ディストリビューションをもってます。
Red Hat Java」とかでぐぐると出てきますね。
しかし、ダウンロードにアカウントが必要なことや、Mac版がないことから、今回は見送り。
サーバーにRed HatLinuxを使ってたりアプリケーションサーバーにJBoss EAPを使ってたり、Red Hatにお世話になっている場合には使うことになると思います。

GraalVM

Oracleが開発しているもうひとつのJava、GraalVMもとりあげておきます。JITにGraalを使っていて、それを事前コンパイルに使うことでネイティブイメージを作ることで話題。 「GraalVM」で検索すれば出てきます。
https://www.graalvm.org/

ダウンロードはOSとバージョンの表になっててわかりやすいですが、インストーラはありません。

Scoop

これもWindowsのパッケージ管理として便利そうなのだけど、やっぱサンドボックスで動かせなかった・・・
https://scoop.sh/