用于“并排”部署Java的Linux标准和工具?

问题描述 投票:2回答:2

问题: 对于在许多不同平台上工作并需要对不同版本的Java,Android NDK,OpenGL等进行回归测试的开发人员,尝试安装JRE和JDK的多个版本时经常会出现问题。

在linux(archlinux)中手动部署/提取NDK,JDK,JRE和J2EE环境的许多版本是很常见的。但是,自动安装包在放置SDK和JRE的方式/位置方面没有标准化,并且在安装过程中经常会报告冲突。

题:

  1. 是否有Oracle,(Sun)或其他已采用的“标准”方法(例如,设置代理/填充程序,符号链接等的最佳实践)?
  2. 是否有任何常见的GUI工具,脚本(如archlinux-java),让我“切换”Active Java环境? (指向不同方向的符号链接等)?
  3. 是否有一个工具允许用户单击“添加新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 linux archlinux openjdk
2个回答
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

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 setjava-8-openjdk`将失败:

% archlinux-java set java-8-openjdk
'/usr/lib/jvm/java-8-openjdk' is not a valid Java environment path

0
投票

Linux和Java很好地结合在一起,但在版本之间切换时的生物舒适性可能会更好。

在我的ubuntu安装中,我现在有3个主动使用的版本:jdk8,jdk-11 lts和jdk12。我了解到手动安装可以提供最佳的整体体验,因为debian java切换器脚本增加了复杂性。

我习惯通过命令行启动IDE(netbeans)。总是。期。这使您可以完全控制JDK要使用的内容以及它开始或打开的内容。

我的快速切换解决方案包括四个部分:

  1. 使用环境变量$ JAVA_HOME,这是一个既定标准,并由例如蚂蚁和maven。
  2. 使用名为J的脚本编辑$ PATH环境变量
  3. 像ln -sf J J8(大写字母)这样的脚本的符号链接
  4. 别名使得切换非常容易: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)'
© www.soinside.com 2019 - 2024. All rights reserved.