在Ubuntu上,可以同时具有多个JVM。使用update-alternatives选择了默认值。但这由于debian策略而没有设置JAVA_HOME环境变量。

我正在编写启动脚本(bash),用于启动Java应用程序。该Java应用程序需要JAVA_HOME环境变量。那么如何获取update-alternatives当前选择的JVM的路径?

#1 楼

对于JRE,应使用以下方法解决问题:

JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")


评论


我需要JDK而不是JRE的目录,但是我使用了以下代码:JAVA_HOME = $(readlink -f / usr / bin / javac | sed“ s:bin / javac ::”)谢谢!

–Witek
2010年5月22日晚上10:35

当我尝试命令echo $(readlink -f / usr / bin / java | sed“ s:bin / java ::”)时,输出为/ usr / lib / jvm / java-7-oracle / jre / / usr / lib / jvm / java-7-oracle /

– Sumit Ramteke
2014年1月31日5:20



rsaddey中给出的代码可以正常工作

– Sumit Ramteke
2014年1月31日5:28



你是学者和绅士。

–rjurney
20 Dec 4'在23:09

#2 楼

可以轻松地采用danadam的解决方案来根据需要检索JDK(即不是JRE)路径:

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")



查找Javac Java编译器(而不是Java)
没有尾随/(被sed s:/ bin ...而不是s:bin ...剥离)


评论


在最新型号Ubuntu 18.04上为我生成/ usr

–rjurney
20/12/04在23:11

#3 楼

export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))

.bashrc对我来说很方便。

#4 楼

所以,您是说这个命令对您没有任何作用?

sudo update-alternatives --config java 


评论


那是应该设置您的JAVA_HOME吗?我发现update-java-alternatives是更新Java的更好方法,因为update-alternatives不会更新所有与Java相关的替代方法。参见askubuntu.com/questions/141791

–詹姆斯·麦克马洪
2012年7月30日13:56

是的,但是我遇到了具有update-alternatives但没有安装update-java-alternatives的Linux实例。

– djangofan
14年6月29日在17:16

#5 楼

我用

sudo apt-get install openjdk-7-jre-headless


安装了Java,然后找到了位置

ls -al /etc/alternatives/java


#6 楼

作为danadams的扩展,答案是:

首先,将第2个Java JRE作为第3个Java选项安装,优先级为“ 3”:

sudo alternatives --install /usr/lib/jvm/jre jre /opt/IBM/java/jre/bin/java 3


然后,您可以列出它们:

update-alternatives --list java


您可以使用以下方法手动设置替代项:

sudo alternatives --config java /opt/IBM/java/jre/bin/java


然后,您的脚本可以即时进行设置,如下所示:

sudo alternatives --set java /opt/IBM/java/jre/bin/java
JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")


这可以更好地说明'sed'命令的作用。尽管您仍然需要为javaw和javac等设置链接,但每个链接都是单独完成的。

#7 楼

不久前,我在Ubuntu论坛上创建了一个教程,介绍如何从Java网站安装最新的JRE / JDK。它还通过将JRE / JDK位置添加到PATH变量中,介绍了如何在系统范围内启用它。如果您愿意,还可以将JAVA_HOME添加到本主题末尾提到的脚本中。

签出它: = 1437100

#8 楼

如果用update-alternatives配置了java或将java手动添加到了PATH变量中,则不需要硬编码的"/usr/bin/java"。我在.bashrc中使用此解决方案:

export JAVA_HOME=$(readlink -m $(which java)/../..)