我的 14.04 机器上安装了 Java7 和 Java8 的组合。
当我想在它们之间切换时,我会执行sudo update-alternatives --config java
. 但是,以这种方式更改它会更改所有终端上的当前 Java 版本。我只想为当前终端更改它。例如,我想将一些用 1.7 编写的 Java 代码与其他用 1.8 编译的代码进行测试。
另一种选择是做类似的事情
function java_use() {
export JAVA_HOME=$(/usr/libexec/java_home -v $1)
export PATH=$JAVA_HOME/bin:$PATH
java -version
}
Run Code Online (Sandbox Code Playgroud)
但这仅适用于我的 Mac,我想要更干净的东西,而不必PATH
每次都修改。也许使用chroot
?
如何“干净地”更改我的 Java 版本 - 最好只在已安装的版本之间 - 并且仅适用于当前的终端会话?
如果您查看/usr/sbin/update-java-alternatives
,您会看到它迭代/usr/lib/jvm/.*.jinfo
以查找已安装的版本,因此您可以执行相同的操作来检测已安装的版本。
至于不是PATH
每次都修改,您可以PATH
通过使用内置hash
命令 (run help hash
)告诉 bash 它应该为 java 使用哪个二进制文件来完全规避。
以下是您可以构建的内容:
java_use() {
local file version versions=()
for file in /usr/lib/jvm/.*.jinfo; do
[[ -e $file ]] || continue
version=${file##*/.} version=${version%.jinfo}
versions+=("$version")
done
if (( ${#versions[@]} == 0 )); then
printf >&2 'No java installed\n'
return 1
fi
select version in "${versions[@]}"; do
if [[ -n $version ]]; then
export JAVA_HOME="/usr/lib/jvm/$version"
hash -p "$JAVA_HOME/bin/java" java
break
fi
done
type java
}
Run Code Online (Sandbox Code Playgroud)