Edited at

Javaのバージョンを簡単に切り替える

More than 3 years have passed since last update.

色々な案件を転々としていると、Javaのバージョンをしょっちゅう切り替えないといけないことがありますよね。

シェルスクリプトの勉強を兼ねて、Javaのバージョンを簡単に切り替えられるスクリプトを作ってみました。

参考サイト:OSXでJavaのバージョンを切り替える


Javaのバージョンを確かめる

$ java -version

java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-466.1-11M4716)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-466.1, mixed mode)

今更書くまでもないが、java -versionでバージョンを確認できる


java_homeコマンド

java_home コマンドは、/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands にあるコマンドで、引数にバージョンを与えると、そのバージョンのJavaがインストールされているパスを返す

$ /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -v 1.6

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
$ /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -v 1.8
/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home

1.6と1.8ではインストールされているパスが違う

バージョンによる違いかと思っていたが、参考サイトによると、どうやらJavaの提供元によってインストール場所が違うようだ

Javaへのパスを通すときに、このコマンドを使うことによって、マイナーバージョン違いや、インストールパスの差異を吸収することができる


シェルスクリプトを書く

.bash_profileの内容をsedで置換して、それを一旦バックアップに保存し、それを./bash_profileに上書きする1


change-java-version.sh

#!/bin/sh

2 VERSION=$1
3
4 cat .bash_profile | sed "s/java_home -v \"1.[0-9]\"/java_home -v \"$VERSION\ "/" > tmp.sh
5
6 mv tmp.sh .bash_profile

source .bash_profileを最後に書いていたのだが、どうもうまくいかないのでとりあえずこれでよしとする

このファイルをホームディレクトリなりに置いて、実行してからsource .bash_profileを実行する2

$ java -version

java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-466.1-11M4716)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-466.1, mixed mode)
$ sudo ./change-java-version.sh 1.7
Password:
$ source .bash_profile
$ java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

これでコマンド2つで(ホントは1つにしたかった)Javaのバージョン切り替えができるようになった





  1. 直接.bash_profileに上書きしようとしたら、.bash_profileが真っ白になってしまった。どうやら、自分自身を書き換えるのはご法度らしい(教えてくれたみうみうさんありがとう) 



  2. カッコ悪いのでシェルスクリプトの中に組み込みたい。教えて、エラい人