My RSS Reader

Description about Blog Author


Homebrew版JDKを卒業してSDKMANでJDKをインストールする!

macOSでは色々なソフトウェアのインストールに、ずっとHomebrewを使っていました。 手元のマシンで普段使いのほとんどのGUIのアプリケーションやコマンドラインツールの導入にHomebrewを使っています。

仕事でJavaでうごくApache Jmeterを最近利用するのもあってこれまでHomebrewで古いバージョンのJavaをインストールしていたのですが、とうとう新しいバージョンに移行せよというお達しが出てしまったため、移行先を検討していました。

% brew doctor Please note that these warnings are just used to help the Homebrew maintainers with debugging if you file an issue. If everything you use Homebrew for is working fine: please don’t worry or file an issue; just ignore this. Thanks!

Warning: Some installed casks are deprecated or disabled. You should find replacements for the following casks: oracle-jdk@17

Homebrewはコマンドラインで利用するFormulaeと、GUIを備えられたアプリケーションが中心に提供されるCasksが提供されています。 Casksはそのほか、配布に制限がある*1アプリケーションなども収録されています。

話を本題に戻して、HomebrewでJavaをインストールするなら普通はFormulaeの方のJavaをインストールすると思うのですが、なぜかFormulaeの方のJavaをインストールしてApache JMeterを起動しようとすると、うまく動かすことができなかったのですよね。 そこであれこれ調べてたどり着いた結果が、Casksで提供されていたOracle JDK 17のインストールだったというわけです。

ところでなんでそもそも古いJavaをインストールしているかというと、Apache JMeterは次のメジャアップデートでJava 17以降のバージョンを正式サポートするという予定があるものの、現行バージョンはJava 8以上(17くらいまで…使うプラグインの都合)とのことで、Java 17をインストールしていました。将来のバージョンがいずれリリースされればもっと新しいバージョンに移行できるのですが、リリースはもうちょっとかかりそうです。というわけで、今はとりあえずJava8から17までのバージョンを維持する必要があります。

ところがHomebrewで提供されるCask版Oracle JDK 17は、もうすでにdeprecated or disabledステートになっています。おそらくもうこのバージョンはアップデートが提供されません。 このまま使い続けることはできるものの気が引けるので、そこでSDKMANというものを使ってみることにしました。

SDKMANのセットアップ

SDKMANはJavaなどの各ベンダーのJDKのほか、いくつかのSDK*2をサポートします。サポートしているソフトウェアについては公式サイトにあるので、今回は紹介するのは省略します。

まず、公式サイトにあるようにコマンドを実行しましょう…といいたいところですが、まずはダウンロードされるシェルスクリプトの中身を確認するため、次のようにコマンドを実行してみます。

% curl -s “https://get.sdkman.io” | cat > hoge.sh

ダウンロードされたファイルの中身を見ると、環境変数に色々設定したり、幅広いOSをサポートしているのがわかります。LinuxにmacOSにWindows WSLなどをサポートしているようです。

では、早速実行してみます。実行すると、どでかい「SDK!」のアスキーアートが!

% curl -s “https://get.sdkman.io” | bash

                            -+syyyyyyys:
                        \`/yho:\`       -yd.
                     \`/yh/\`             +m.
                   .oho.                 hy                          .\`
                 .sh/\`                   :N\`                \`-/o\`  \`+dyyo:.
               .yh:\`                     \`M-          \`-/osysoym  :hs\` \`-+sys:      hhyssssssssy+
             .sh:\`                       \`N:          ms/-\`\`  yy.yh-      -hy.    \`.N-\`\`\`\`\`\`\`\`+N.
           \`od/\`                         \`N-       -/oM-      ddd+\`     \`sd:     hNNm        -N:
          :do\`                           .M.       dMMM-     \`ms.      /d+\`     \`NMMs       \`do
        .yy-                             :N\`    \`\`\`mMMM.      -      -hy.       /MMM:       yh
      \`+d+\`           \`:/oo/\`       \`-/osyh/ossssssdNMM\`           .sh:         yMMN\`      /m.
     -dh-           :ymNMMMMy  \`-/shmNm-\`:N/-.\`\`   \`.sN            /N-         \`NMMy      .m/
   \`oNs\`          -hysosmMMMMydmNmds+-.:ohm           :             sd\`        :MMM/      yy
  .hN+           /d:    -MMMmhs/-.\`   .MMMh   .ss+-                 \`yy\`       sMMN\`     :N.
 :mN/           \`N/     \`o/-\`         :MMMo   +MMMN-         .\`      \`ds       mMMh      do
/NN/            \`N+....--:/+oooosooo+:sMMM:   hMMMM:        \`my       .m+     -MMM+     :N.

/NMo -+ooooo+/:-….`…:+hNMN. `NMMMd` .MM/ -m: oMMN. hs -NMd` :mm -MMMm- .s/ -MMm. /m- mMMd -N. `mMM/ .- /MMh. -dMo -MMMy od. .MMMs..—yh +MMM. sNo`.sNMM+ :MMMM/ sh`+MMMNmNm+++- mMMM- /–ohmMMM+ :MMMMm. `hyymmmdddo MMMMh. ```` `-+yy/`yMMM/ :MMMMMy -sm:.``..-:-.` dMMMMmo-.``````..-:/osyhddddho. `+shdh+. hMMM: :MmMMMM/ ./yy/` `:sys+/+sh/ .dMMMMMMmdddddmmNMMMNNNNNMMMMMs sNdo- dMMM- `-/yd/MMMMm-:sy+. :hs- /N` `/ymNNNNNNNmmdys+/::—-/dMMm: +m- mMMM+ohmo/.` sMMMMdo- .om: `sh `.—–+/.` `.-+hh/` `od. NMMNmds/ `mmy:` +mMy `:yy. /moyso+//+ossso:. .yy` `dy+:` .. :MMMN+—/oys: /+m: `.-:::-` /d+ +MMMMMMMNh:` +MN/ -yh. `+hddhy+. /MM+ .sh: :NMo -sh/ -NMs `/yy: .NMy `:sh+. `mMm` ./yds- `dMMMmyo:-.````.-:oymNy:` +NMMMMMMMMMMMMMMMMms:` -+shmNMMMNmdy+:`

                                                             Now attempting installation...

Looking for a previous installation of SDKMAN… Looking for unzip… Looking for zip… Looking for tar… Looking for curl… Looking for sed… Installing SDKMAN scripts… Create distribution directories… Getting available candidates… Prime platform file… Prime the config file… Installing script cli archive… * Downloading… ######################################################################## 100.0% * Checking archive integrity… * Extracting archive… * Copying archive contents… * Cleaning up…

Installing script cli archive… * Downloading… ######################################################################## 100.0% * Checking archive integrity… * Extracting archive… * Copying archive contents… * Cleaning up…

Set version to 5.19.0 … Set native version to 0.5.0 … Attempt update of login bash profile on OSX… Added sdkman init snippet to /Users/ytooyama/.bash_profile Attempt update of zsh profile… Updated existing /Users/ytooyama/.zshrc

All done!

You are subscribed to the STABLE channel.

Please open a new terminal, or run the following in the existing one:

source "/Users/ytooyama/.sdkman/bin/sdkman-init.sh"

Then issue the following command:

sdk help

Enjoy!!!

メッセージにあるようにターミナルを開き直すか、sorceコマンドでsdkman-init.shを読み直しましょう。 これで、インストール完了です。

% source “/Users/ytooyama/.sdkman/bin/sdkman-init.sh” % sdk version

SDKMAN! script: 5.19.0 native: 0.5.0

JDKのインストール

次に、本題のJavaのインストールです。その前に、Homebrewでインストールした方のJavaを削除してしまいます。 これまでお世話になりました。

% brew uninstall oracle-jdk@17 ==> Uninstalling Cask oracle-jdk@17 ==> Uninstalling packages with sudo; the password may be necessary: com.oracle.jdk-17.0.12 Password: ==> Purging files for version 17.0.12 of Cask oracle-jdk@17

では次に、SDKMANでJavaをインストールします。 以下を実行すると、いろいろなベンダーが提供しているJavaがサポートされていることがわかります。

% sdk list java

トップページを見ると、Temurin(Eclipse)のJavaがオススメされているようです。今回はこれを入れてみましょう。

% sdk list java | grep tem Temurin | | 23.0.2 | tem | | 23.0.2-tem
| | 23.0.1 | tem | | 23.0.1-tem
| | 21.0.6 | tem | | 21.0.6-tem
| | 21.0.5 | tem | | 21.0.5-tem
| | 17.0.14 | tem | | 17.0.14-tem
| | 17.0.13 | tem | | 17.0.13-tem
| | 11.0.26 | tem | | 11.0.26-tem
| | 11.0.25 | tem | | 11.0.25-tem
| | 8.0.442 | tem | | 8.0.442-tem
| | 8.0.432 | tem | | 8.0.432-tem
Omit Identifier to install default version 21.0.6-tem: $ sdk install java 21.0.6-tem

バージョン8も入れられるようですが、今回はバージョン17の最新版をインストールします。

% sdk install java 17.0.14-tem

Downloading: java 17.0.14-tem

In progress…

############################################################################################# 100.0%

-e \033[1;32mRepackaging Java 17.0.14-tem…\033[0m

-e \033[1;32mDone repackaging…\033[0m -e \033[1;32mCleaning up residual files…\033[0m

-e \033[1;32mInstalling: java 17.0.14-tem\033[0m -e \033[1;32mDone installing!\033[0m

-e \033[1;32mSetting java 17.0.14-tem as default.\033[0m

なにかちょっと表示がバグっていますが、インストールは完了したようです。 バージョンを確認してみます。想定通りのバージョンがインストールされたのが確認できます。 パスを通すといったようなことも自動でやってくれたようです。ラクです。

% sdk current java

Using java version 17.0.14-tem

% java –version openjdk 17.0.14 2025-01-21 OpenJDK Runtime Environment Temurin-17.0.14+7 (build 17.0.14+7) OpenJDK 64-Bit Server VM Temurin-17.0.14+7 (build 17.0.14+7, mixed mode)

% javac –version javac 17.0.14

Java対応アプリが動くことの確認

Javaをインストールする理由の一つがJMeterの実行に必要だったわけで、JMeterが動かないと困りますので早速実行してみます。

% jmeter

JMeterが実行できました。これで懸念の一つは解決できました。

さらに、Homebrewのチェックもしておきます。Your system is ready to brew.と表示されればOKです。

% brew doctor Your system is ready to brew.

これでセットアップ完了です。

SDKMANでJMeterを管理できるらしい

ちなみに先ほどJMeterの話がでましたが、実はSDKMANを使ってJMeterもインストールできるようです。

現在JMeterは手動インストールで動かしている*3ので、そちらに移行しようか検討中です。

とはいえ、ベンチマークツールはテストする環境と同じバージョンを使わないと意味がない*4ですから、しばらくは公式バイナリーを使うことになると思います。

% sdk list jmeter

Available Jmeter Versions

 5.6                 3.1                                                    
 5.5                 3.0                                                    
 5.4.3               2.13                                                   
 5.4.2               2.12                                                   
 5.4.1               2.11                                                   
 5.4                 2.10                                                   
 5.3                 2.9                                                    
 5.2.1               2.8                                                    
 5.2                 2.7                                                    
 5.1.1               2.6                                                    
 5.1                                                                        
 5.0                                                                        
 4.0                                                                        
 3.3                                                                        
 3.2                                                                        

================================================================================

    • local version * - installed
  • currently in use ================================================================================

Homebrewには、これまでお世話になりました*5。 SDKMAN、これからどうぞよろしくお願いします。

*1:例えば利用規約に同意しないとダウンロードできない、もしくはソースが公開されていない

*2:JavaベースのSDK

*3:もともとJMeterもJavaもHomebrewでインストールしていたのですが、JMeterをHomebrewでインストールするとJDK 21がインストールされてしまい、JDK 21との組み合わせでは一部支障があったため、公式のバイナリーでインストールしていました

*4:macOSで動かすJMeterではテンプレート作成と動作確認に使い、実際のベンチマークはLinux上でCUIモードで実行しています。そのため、利用するバージョンを合わせる必要があります。

*5:まだ別のソフトウェアの利用には使うけど

[source]