用于“并排”部署Java的Linux标准和工具?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于“并排”部署Java的Linux标准和工具?相关的知识,希望对你有一定的参考价值。
问题: 对于在许多不同平台上工作并需要对不同版本的Java,android NDK,OpenGL等进行回归测试的开发人员,尝试安装JRE和JDK的多个版本时经常会出现问题。
在linux(archlinux)中手动部署/提取NDK,JDK,JRE和J2EE环境的许多版本是很常见的。但是,自动安装包在放置SDK和JRE的方式/位置方面没有标准化,并且在安装过程中经常会报告冲突。
题:
- 是否有Oracle,(Sun)或其他已采用的“标准”方法(例如,设置代理/填充程序,符号链接等的最佳实践)?
- 是否有任何常见的GUI工具,脚本(如archlinux-java),让我“切换”Active Java环境? (指向不同方向的符号链接等)?
- 是否有一个工具允许用户单击“添加新Java平台”并让它们分别指定JRE和JDK路径(例如,分别更新8_u34和8_u49)。
笔记: 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”下,以便更容易更改脚本/变量。
谢谢你的想法!
包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
List compatible Java environments installed
% 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部分。
Change default Java environment
% 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
Linux和Java很好地结合在一起,但在版本之间切换时的生物舒适性可能会更好。
在我的ubuntu安装中,我现在有3个主动使用的版本:jdk8,jdk-11 lts和jdk12。我了解到手动安装可以提供最佳的整体体验,因为debian java切换器脚本增加了复杂性。
我习惯通过命令行启动IDE(netbeans)。总是。期。这使您可以完全控制JDK要使用的内容以及它开始或打开的内容。
我的快速切换解决方案包括四个部分:
- 使用环境变量$ JAVA_HOME,这是一个既定标准,并由例如蚂蚁和maven。
- 使用名为J的脚本编辑$ PATH环境变量
- 像ln -sf J J8(大写字母)这样的脚本的符号链接
- 别名使得切换非常容易:j8 for java 8,j11 for 11 etc.
#!/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)'
以上是关于用于“并排”部署Java的Linux标准和工具?的主要内容,如果未能解决你的问题,请参考以下文章
用于命令行的 Qt Creator 标准输入,可部署到远程 Linux 主机