我的 14.04 机器上安装了 Java7 和 Java8 的组合。
当我想在它们之间切换时,我会执行sudo update-alternatives --config java
。但是,以这种方式更改它会更改所有终端上的当前 Java 版本。我只想为当前终端更改它。例如,我想针对在 1.8 中编译的其他代码测试在 1.7 中编写的一些 Java 代码。
另一种选择是做类似的事情
function java_use() {
export JAVA_HOME=$(/usr/libexec/java_home -v $1)
export PATH=$JAVA_HOME/bin:$PATH
java -version
}
但这只适用于我的 Mac,我想要更简洁的东西,而不必PATH
每次都进行修改。也许使用chroot
?
我如何才能“干净地”更改我的 Java 版本 - 最好仅在已安装的版本之间 - 并且仅适用于当前终端会话?
答案1
如果你看一下/usr/sbin/update-java-alternatives
,你会看到它会迭代/usr/lib/jvm/.*.jinfo
查找已安装的版本,因此你可以执行相同的操作来检测已安装的版本。
至于不是PATH
每次都进行修改,您可以通过使用内置命令(run )PATH
告诉 bash 应该为 java 使用哪个二进制文件来完全规避这个问题。hash
help hash
以下是您可以借鉴的内容:
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
}