切り替える OSX での JAVA_HOME

昔は Java Preferences で切り替えていた Java のバージョンですが、最近は java_home コマンドを使って JAVA_HOME 環境変数に設定するのが良い。


java_home コマンド

man ページをかいつまむと、
java_home コマンドは、JAVA_HOME 環境変数を設定するための適切なパスを返します。 Javaの環境設定アプリケーションでのユーザーの有効および優先のJVMからこのパスを決定し、ユーザーが rc ファイルに$JAVA_HOMEを設定したり、最小バージョンまたはアーキテクチャの要件を満たす適切なJVMを使用する方法を提供します。


JAVA_HOME 環境変数の指定

以下のように java_home コマンド の結果を export

export JAVA_HOME=`/usr/libexec/java_home`


バージョン指定したい場合は

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`



java_home コマンドの使い方

"-V or --verbose" で JVM のリストが出力できる。

> /usr/libexec/java_home -V
Matching Java Virtual Machines (3):
    1.7.0_45, x86_64:	"Java SE 7"	/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
    1.6.0_65-b14-462, x86_64:	"Java SE 6"	/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_65-b14-462, i386:	"Java SE 6"	/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

こんな感じ。


"-v or --version" にて JVMVersion をフィルタリングした JAVA_HOME のパスを返却。引数には "1.5+" や "1.6*" のような指定ができる。

> /usr/libexec/java_home -v 1.6
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

存在しないと

> /usr/libexec/java_home -v 1.5
Unable to find any JVMs matching version "1.5".
/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

"-a or --arch" で "x86_64" などのアーキテクチャ指定できたり、"-d or --datamodel" で "-d32" と "-d64" のデータモデル指定できたり