Linux标准部署Java"并排"和工具?

时间:2014-08-21 19:46:33

标签: java linux archlinux openjdk

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

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

问题:

  1. 是否有"标准" Oracle,(Sun)或其他已采用的方法所描述的方法(例如,设置代理/填充程序,符号链接等的最佳实践?
  2. 是否有任何常见的GUI工具,脚本(如archlinux-java),这将让我" Switch" Active Java环境? (指向不同方向的符号链接等)?
  3. 是否有一个工具允许用户点击"添加新的Java平台"并让他们分别指定JRE和JDK路径(比如,分别更新8_u34和8_u49)。
  4. 备注:
    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"这样更容易更改脚本/变量。

    感谢您的想法!

2 个答案:

答案 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

列出已安装的兼容Java环境

% 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 部分。

更改默认Java环境

% 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以及它的开头或开头,具体取决于项目。

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

  1. 使用环境变量$ JAVA_HOME,这是已建立的标准,例如蚂蚁和行家。
  2. 使用名为J的脚本来编辑$ PATH环境变量
  3. 符号链接到脚本,例如ln -sf J J8(大写)
  4. 别名使得键入时的切换非常容易:Java为j8,Java 8为j11,等等。
#!/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)'