それわかるぅ〜

日々「それわかるぅ〜」と思ったこと、忘れたくないことを徒然なるままに。Inputした情報を定着させるためのOutputの場として使用しています。誤字脱字等はたぶん仕様です。

MacでのJDKのバージョンを簡単に切り替える方法

前からJDKは1.6を使っていたんだけれども半年ほど前に1.8に変えたらなんかバッテリーの減りが異常に早かったのでよく調べてみたら、どうやらJDKのバグで1.7とか1.8はバッテリーの減りが早くなるとのこと。それでいままでずっと1.6を使ってきたんだけども今回とある都合でJDKのバージョンを1.8にしないといけないので、その設定とJDKのバージョンを切り替えられるようにする方法を忘れないように書いておく。

そもそもインストールされているJDK

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk   

/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk   

となっている。前者はAppleからダウンロードしてインスコしたもので後者はおらくるからインスコしたもの。場所が違うらしい。 そして、使うJDKの設定は例えば僕はzsh使ってるので、ルート以下の.zshrcに

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) 

とか

export JAVA_HOME=$(/usr/libexec/java_home -v 1.6) 

書けば良い。zshじゃない人はそれぞれの設定ファイルに書き込む。それで切り替えたければこれをいちいちファイル開けて書き換えればいいだけのことだけども、ちょっと今回は変わった方法でやりたかったのでシェルスクリプトを書くことにした。例えばJDKのバージョンを1.8に切り替えるシェルスクリプトは以下のように書ける。

#!/bin/sh
#JDK1.8
#export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
#JDK1.6
#export JAVA_HOME=$(/usr/libexec/java_home -v 1.6)
sed -i '' 's/export JAVA_HOME=$(\/usr\/libexec\/java_home -v .*)/export JAVA_HOME=$(\/usr\/libexec\/java_home -v 1.8)/' .zshrc
echo "Below in the file .zshrc"
cat .zshrc
echo "This terminal is going to restart to change Java version into JDK1.8 after 3s!"
sleep 3s
exec $SHELL -l

もちろん1.6に切り替えたければ適宜バージョンを変えて書けば良い。

ただし、このスクリプトはバージョンを切り替えるために最終行に

exec $SHELL -l

を入れてターミナル上からターミナルを再起動するような方法を採っていて、人によっては都合が悪いかもしれないのでその辺りは自分でいじってください。 あと

sleep 3s

はちょっとした計らいです。大して意味無いですけどいきなり再起動するのはちょっと気持ち悪いので3秒まちましょう。  

この過程でMacsedの挙動が特殊だったことに気づいたのでまたそれは別に書くことにする。