Posted at

direnv で java を切り替える

direnv は、ディレクトリごとに環境変数を切り替えられるツールで、複数のプロジェクトを並行開発している場合などに便利です。

Mac なら、以下のような関数を ~/.direnvrc に定義しておくと・・・

# ~/.direnvrc

use_java() {
if [ "$#" -ne 1 ]; then
echo "usage: use java VERSION" >&2
return 1
fi
local v
v="$1"
if [ "$v" -le "8" ]; then
v="1.$v"
fi
export JAVA_HOME="$(/usr/libexec/java_home -v "$v")"
PATH_add $JAVA_HOME/bin
}

各プロジェクトでは、こんな風に書くだけでOK

# [プロジェクトのディレクトリ]/.envrc

use_java 11 # JDK 11 を使う

なお、direnv には use_hogeuse hoge と書ける、(微妙に)便利な機能があるので、こうも書けます。

use java 11

なお、Java以外の言語については use が標準で提供されています。

https://github.com/direnv/direnv/blob/master/stdlib.sh

https://github.com/direnv/direnv/blob/master/man/direnv-stdlib.1.md