如何在Debian / Ubuntu上确定JAVA_HOME?


95

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

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

Answers:


137

对于JRE,这样的事情应该可以解决:

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

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

当我试图命令echo $(readlink -f /usr/bin/java | sed "s:bin/java::"),输出是/usr/lib/jvm/java-7-oracle/jre//usr/lib/jvm/java-7-oracle/
萨米特Ramteke

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

43

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

JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
  • 查找JDK(而不是JRE)中包含的javac Java编译器(而不是Java)。
  • 没有尾随/(由sed s:/ bin ...而不是s:bin ...剥离)

12

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

.bashrc对我来说很方便。


9

因此,您是说此命令对您没有任何作用?

sudo update-alternatives --config java 

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

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

3

我安装了Java

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

然后找到位置

ls -al /etc/alternatives/java

2

作为danadams的扩展,请回答:

首先,将第二个Java JRE作为第三个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等设置链接,但每个链接都是单独完成的。


1

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

检查一下:http : //ubuntuforums.org/showthread.php?t=1437100


1

如果java update-alternatives手动配置了或已添加到PATH变量中,则无需进行硬编码"/usr/bin/java"。我在.bashrc中使用以下解决方案:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.