こんにちは、素人エンジニアです。
この記事では、macでOracle JDKのバージョンを切り替える方法を紹介します。
開発プロジェクトごとに使用するJavaのバージョンが異なるときは、これから紹介する方法でJDKを切り替えましょう。
JDKのバージョンを切り替える手順
1. 現在使用しているJDKのバージョンをチェック
java -version
ターミナルでjava -versionを実行して、現在使用されているJavaのバージョンをチェックします。
< 例 >
% java -version java version "16.0.1" 2021-04-20 Java(TM) SE Runtime Environment (build 16.0.1+9-24) Java HotSpot(TM) 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
このように、javaのバージョン情報が出力されればOKです。
JDKがインストールされていない場合は、バージョン情報が出力されません。
Oracle JDKのインストール方法については、この記事で解説しましたので参考にしてください。
2. インストールされているJDKをチェック
/usr/libexec/java_home -V
このコマンドを実行すると、macにインストールされているOracle JDKの一覧が表示されます。
< 例 >
% /usr/libexec/java_home -V Matching Java Virtual Machines (2): 16.0.1 (x86_64) "Oracle Corporation" - "Java SE 16.0.1" /Library/Java/JavaVirtualMachines/jdk-16.0.1.jdk/Contents/Home 11.0.11 (x86_64) "Oracle Corporation" - "Java SE 11.0.11" /Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk-16.0.1.jdk/Contents/Home
今回は、11.0.11に切り替えていきます。
3. JAVA_HOMEを設定する
/usr/libexec/java_home -v "バージョン番号"
このコマンドで、指定したバージョンのJAVA_HOMEのPATHが出力されます。
< 例 >
% /usr/libexec/java_home -v "11" /Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home % /usr/libexec/java_home -v "16" /Library/Java/JavaVirtualMachines/jdk-16.0.1.jdk/Contents/Home
このJAVA_HOMEのPATHを通してあげることで、バージョンの切り替えが可能です。
次の二行を設定ファイル(.zshrcや.bash_profileなど)に追加してください。
設定ファイルはopen ~/.zshrcで開けます
export JAVA_HOME=`/usr/libexec/java_home -v "11"` PATH=$JAVA_HOME/bin:$PATH
/usr/libexec/java_home -v “11”の数字を書き換えるだけで、そのバージョンのJDKがJAVA_HOMEに設定されます。指定したバージョンがない場合は、現在設定されているJAVA_HOMEのPATHがそのまま設定されます。
設定ファイルでPATHを通す方法は、こちらの記事を参考にしてください。
最後に、魔法のコマンドsourceも忘れずに実行してください。
これをしないと反映されません。
source ~/.zshrc
4. バージョンが切り替わっているかチェック
% java -version java version "11.0.11" 2021-04-20 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)
java -versionを実行して、バージョン情報が切り替わっていたら完了です!
PATHを通す一連の処理は、今後何度もやることになるかもしれません。
覚えてしまってもいいかも。
↓↓Javaの基本はこの1冊でマスターできる!!↓↓
コメント
この作業をシェルスクリプトで行うことはできますか?
コメントありがとうございます。(返信遅れてすいません…)
引数に指定した値から、sedコマンドを使ってjavaのバージョンを変更するシェルスクリプトを考えてみました。
すでに良い方法を見つけているかもしれませんが、少しでも参考になればと思います。
実行イメージ
% sh change-java-version.sh 16
% source ~/.zshrc
% java -version
↓以下、シェルスクリプトの内容(.zhrcを想定)
#!/bin/sh
version=$1
target=”JAVA_HOME=\`\/usr\/libexec\/java_home -v”
#.zshrcファイル内のJAVA_NOMEのversionを変更
sed -i -e “s/${target} \”.*\”\`/${target} \”${version}\”\`/g” ~/.zshrc