在 Bash 脚本中临时切换 Java 版本 - Ubuntu Linux

在 Bash 脚本中临时切换 Java 版本 - Ubuntu Linux

我正在使用 Java keytool 作为更大的 bash 脚本的一部分。我需要传入密码来创建密钥库,因此使用了命令keytool -importkeystore -deststorepass:file ${somefile}

-deststorepass:file根据文档, 这仅在 Java 7 中可用http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/keytool.html

我之前曾使用过该脚本,但我认为这台机器上的默认 Java 一定是 Java 6,而且我不确定它是否可以update-alternatives -config java被认为是稳定的。

有人知道在 Linux 环境中为特定脚本设置 Java 版本的方法吗?我看到了,但我自己无法将其翻译成 Linux。 在 OS X 中切换 Java 7 和 8

谢谢!

答案1

我猜您的愿望不是暂时更改系统范围的默认 Java 虚拟机,因为这可能会对其他应用程序产生意想不到的副作用,而只是找到一台适合您目的的机器。

假设您的 JVM 安装在没有空格的目录中(标准发行版中的一个简单的假设):

# wantedArg is the argument that we need 
function getSuitableAlternative() {
  cmd=$1
  wantedArg=$2
  JVM_LIST=$(update-alternatives --list $cmd) 

  # Try all available JVMs until we find one supporting the specified parameter
  for jvm in $JVM_LIST 
  do
    $jvm -help |grep -q -- -$wantedArg && { echo $jvm; break; }
  done
}

# Find a "java" command supporting "deststorepass" argument
suitableJvm=$(getSuitableAlternative java deststorepass)

# Bad luck. 
if [ "$suitableJvm" == "" ]
then 
  echo "No suitable JVM machine found" >&2
  echo "Please sudo apt-get install jdk7..." >&2
  exit 1 
fi

$suitableJvm <...>

相关内容