问题:
对于在许多不同平台上工作并需要对不同版本的Java,Android NDK,OpenGL等进行回归测试的开发人员,经常会出现尝试安装JRE和JDK的多个版本的问题。
在linux(archlinux)中手动部署/提取NDK,JDK,JRE和J2EE环境的许多版本是很常见的。但是,自动安装包在放置SDK和JRE的方式/位置方面没有标准化,并且在安装过程中经常会报告冲突。
问题:
备注:
archlinux-java仅支持openjdk和java-8-oracle,但不支持oracle java的过去版本,(6或7),(https://wiki.archlinux.org/index.php/java#Switching_between_JVM)
希望这个"一个工具"代理/填充所有不同的java版本将在更新中更新。
通过手动安装不同的java版本,它会破坏更新,但这是重点 - 在不同的,较旧的和未更新的版本上进行测试。
在这种情况下,计算机上有大约2到6个部署。
最终发生的事情是/ opt被使用(有时),usr / lib / jvm,甚至其他文件夹也被其他安装所吸引。
最好将所有部署放在" opt"甚至" lib"这样更容易更改脚本/变量。
感谢您的想法!
答案 0 :(得分:1)
包java-common还提供了一个实用程序脚本 archlinux-java ,可以显示和更改默认的Java环境。
此脚本将链接java-default-runtime
设置为指向/var/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}
中安装的有效非冲突Java环境。它还为/usr/bin
中的Java环境集提供的所有可执行文件创建和更新链接。
帮助程序脚本archlinux-java
提供了以下功能:
archlinux-java <COMMAND> COMMAND: status List installed Java environments and enabled one get Return the short name of the Java environment set as default set <JAVA_ENV> Force <JAVA_ENV> as default unset Unset current default Java environment fix Fix an invalid/broken default Java environment configuration
% archlinux-java status
示例:
% archlinux-java status Available Java environments: java-7-openjdk (default) java-8-openjdk/jre
请注意(默认)表示java-7-openjdk
当前设置为默认值。调用java
和其他二进制文件将依赖于此Java安装。另请注意,之前的输出只安装了OpenJDK 8的 JRE 部分。
% archlinux-java set <JAVA_ENV_NAME>
示例:
% archlinux-java set java-8-openjdk/jre
请注意,archlinux-java
不允许您设置无效的Java环境。在前面的示例中,安装了jre8-openjdk,但jdk8-openjdk is **not** so trying to set
java-8-openjdk`将失败:
% archlinux-java set java-8-openjdk '/usr/lib/jvm/java-8-openjdk' is not a valid Java environment path
答案 1 :(得分:0)
Linux和Java结合得很好,但是在版本之间切换时,动物的舒适度会更好。
在ubuntu安装上,我现在有3个活跃使用的版本:jdk8,jdk-11 lts和jdk12。我了解到,由于debian java switcher脚本增加了复杂性,因此手动安装可提供最佳的整体体验。
我习惯于通过命令行启动我的IDE(netbeans)。总是。期。 这可以使您完全控制要使用的JDK以及它的开头或开头,具体取决于项目。
我的快速切换解决方案包括四个部分:
#!/bin/bash
## This script assumes that the JAVA_HOME environment variable is set
## and that the PATH contains ${JAVA_HOME}/bin
## The java variant that is to be put in JAVA_HOME and PATH is determined
## by how what this script is called.
## J8 for Java 8, J11 for Java 11 and J12 for Java 12. It could easily be
## extended to include Java 9 and 10 too, buy at the time of writing I see
## little point because 12 is the current open JDK and 11 the LTS version.
## J8 is in because it is the default for many still.
##
## You typically have (sym) links pointing to this script, so it appears to have different names, changing its meaning.
##
## Usage: eval $(scriptname) e.g. eval $(J12)
## By using bash aliases, such as alias j8='eval $(J8)' the use of this script will become a feast.
## get this script name
thisname=$(basename $0)
## get the current path setting
OPATH=${PATH}
## Let my name do the choosing
case ${thisname} in
J8)
NJAVA_HOME=/usr/lib/jvm/java-8-oracle;;
J11)
NJAVA_HOME=/usr/lib/jvm/jdk-11.0.2;;
J12)
NJAVA_HOME=/usr/lib/jvm/jdk-12;;
*)
echo echo call me as 'eval $(J8)', 'eval $(J11)' or 'eval $(J12)'
exit 1
;;
esac
## edit path to use the new java_home
p=$(echo ${OPATH} | sed -e "s@${JAVA_HOME}/bin@${NJAVA_HOME}/bin@")
##
echo export JAVA_HOME=${NJAVA_HOME}
echo export PATH=${p}
然后,我将此文件链接为ln -sf J J8 ; ln -sf J J11
等
别名是在我的〜/ .bash_aliases脚本中定义的。
alias j10='eval $(J10)'
alias j11='eval $(J11)'
alias j12='eval $(J12)'