ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

古いバージョンのJDKの取り扱いとJAVA_HOMEの指定方法

特にJavaで何か開発しているわけではないのですが、新機能の「jshell」を使ってみたかったので、Java SE 9をインストールしてみました。基本的にOracleのサイトからJava SE 9をダウンロードして使うだけなのですが、新しいバージョンをインストール後にjava,javacコマンドでバージョンを確認したらJava 8u144が出力されたのでおかしいと思い調べたところ、削除しない限りJDKは上書きされずにシステムに残るということを知りました。早速コマンドを実行した結果が次の通りです。

% /usr/libexec/java_home -V
Matching Java Virtual Machines (5):
    9, x86_64:  "Java SE 9" /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
    1.8.0_144, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
    1.8.0_141, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_141.jdk/Contents/Home
    1.8.0_131, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
    1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home

見事に複数のバージョンのJDKがシステムに存在してますね。ちなみにJDK 8はバージョンあたり350MBくらいでした。とりあえず、「jdk-9.jdk」と「jdk1.8.0_144.jdk」だけ残して削除することにしました(1GB程度、空きました)。

さて、私はJavaのバージョンを次のようにJAVA_HOMEで定義しています。zshを使っているので.zshrcに記述してます。

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
(Java 8を使う場合)

export JAVA_HOME=`/usr/libexec/java_home -v 9`
(Java 9を使う場合)

Java 9ではバージョンの指定は1.9ではなく、9と指定する様です。