Linux中的JAVA_HOME目录


71

有什么我可以用来查找JAVA_HOME目录的linux命令吗?我尝试打印出环境变量(“ env”),但是找不到目录。

Answers:


62

echo $JAVA_HOME如果已设置,将打印该值。但是,如果您没有在启动脚本中手动设置它,则可能未设置。

如果您尝试which java了却找不到任何东西,则Java可能未安装在您的计算机上,或者至少不在您的路径中。根据您拥有的Linux发行版以及是否具有root用户访问权限,可以访问http://www.java.com下载所需的版本。然后,您可以将JAVA_HOME设置为指向该目录。请记住,这只是一个约定,不应该用于确定是否已安装Java。


10
JAVA_HOME在Linux系统中不再定义,不推荐使用。
彼得·奎林

3
@PeterQuiring您应该引用该声明的出处..您完全错了。
harschware,2015年

3
@harschware当我安装Ubuntu时,即使安装了JDK,也未设置JAVA_HOME。另请阅读/ usr / share / doc / openjdk-8-jre-headless / JAVA_HOME,它说不再需要JAVA_HOME(旧式)。
彼得·奎林

@PeterQuiring谢谢Peter,很遗憾,我无法轻松访问该文件。也许有人试图在Java 8中弃用它,但是依赖于JAVA_HOME的大量工具要求仍然需要继续定义变量很多年……
harschware 2015年

@harschware可能只是Ubuntu的事情。也许其他发行版仍对其进行了定义。
Peter Quiring

86

在Linux上,您可以运行 $(dirname $(dirname $(readlink -f $(which javac))))

在Mac上,您可以运行 $(dirname $(readlink $(which javac)))/java_home

我不确定Windows,但我想where javac会很近的


6
这是一个很好的解决方案,但是请记住使用readlink的规范标志,因为Java可以设置多个链接,因此请$(dirname $(dirname $(readlink -f $(which javac))))在Linux上使用
Matthew O'Riordan 2014年

谢谢@ MatthewO'Riordan!我-f为linux命令添加了标志。请注意,readlinkmac上的GNU版本不是该版本,因此我排除-f了该脚本的mac版本。通过brew安装了GNU版本的Mac用户readlink可以使用-f
jsdevel

对于使用/ etc / alternatives管理不同Java版本的人来说,这特别好。
gilbertpilz '16

在Mac OS上工作正常
minhas23 '16

1
这是找到任何原始路径的最佳解决方案。我经常在Java,Maven和其他方面使用它!谢谢!
马丁·马耶夫斯基

45

另一个解决方案,这个人的跨平台(使用java),将您指向jre的位置。

java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home'

输出所有java的当前设置,并找到一个名为的设置java.home

对于Windows,您可以使用findstr而不是grep。

java -XshowSettings:properties -version 2>&1 | findstr "java.home"

2
我已经研究了很多找到JAVA_HOME的方法,我认为这是最好的方法之一!感谢您提及它!
drwatsoncode

很高兴它有所帮助!
Parth Mehrotra

1
值得一提的是,这是从JDK1.7(IIRC)开始的。在此之前,您需要致电:jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'。在这两种情况下,对于“跨平台”方面,建议都在前面加上/usr/bin/env
Moreaki '17

2
天哪,这个工具比所有其他工具都好,谢谢!
哈维·林

1
这是更好的答案。
dr_

34

我知道这很晚,但是此命令搜索/ usr /目录以找到适合您的java

sudo find /usr/ -name *jdk

结果到

/usr/lib/jvm/java-6-openjdk
/usr/lib/jvm/java-1.6.0-openjdk

仅供参考,如果您使用的是Mac,则当前JAVA_HOME位于

/System/Library/Frameworks/JavaVM.framework/Home


1
必须使用sudo find / -name * javac来查找我已安装的oracle VM
顽强的

1
您可能想尝试一下sudo find /usr/ -name *jdk*我的做法/usr/lib/jvm/java-7-openjdk-amd64/
JVE999,2014年

12

要显示环境变量的值,请使用:

回声$ VARIABLE

因此您的情况将是:

回声$ JAVA_HOME

如果您没有设置它,可以添加.bashrc文件:

导出JAVA_HOME = $(readlink -f / usr / bin / java | sed“ s:bin / java ::”)

当您更新软件包时,它会动态变化。


不安全的sed命令:如果/ usr / bin / java是一个符号链接/usr/bin/java-8/bin/java怎么办?您将得到输出/usr/-8/bin/java
GKFX

1
很棒的解决方案!如果要使用jdk代替jre,请调整readlink -f / usr / bin / java | sed“ s:jre / bin / java ::”
cyberoblivion

9

如果$JAVA_HOME在您的环境中定义...

$ echo $JAVA_HOME
$ # I am not lucky...

您可以从加载的类中猜测出来。

$ java -showversion -verbose 2>&1 | head -1
[Opened /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75.x86_64/jre/lib/rt.jar]

如果有多个安装,此方法可确保找到正确的jdk/jre使用的方法。

或使用strace

$ strace -e open java -showversion 2>&1 | grep -m1 /jre/
open("/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75.x86_64/jre/bin/../lib/amd64/jli/tls/x86_64/libpthread.so.0", O_RDONLY) = -1 ENOENT (No such file or directory)

2

在终端上,键入:

回声“ $ JAVA_HOME”

如果您什么都没得到,那么您的环境变量JAVA_HOME尚未设置。您可以尝试使用“ locate java”来尝试发现Java安装所在的位置。


2

您是否设置了JAVA_HOME

  • korn和bash shell:export JAVA_HOME = jdk-install-dir
  • Bourne shell:JAVA_HOME = jdk-install-dir;导出JAVA_HOME
  • C shell:setenv JAVA_HOME jdk安装目录

1

这是一项改进,仅抓取标准输出目录:

java -XshowSettings:properties -version 2>&1 \
   | sed '/^[[:space:]]*java\.home/!d;s/^[[:space:]]*java\.home[[:space:]]*=[[:space:]]*//'

2
短一些,虽然用三个叉而不是两个叉:: ${JAVA_HOME:=$(/usr/bin/env java -XshowSettings:properties -version 2>&1 | grep "java.home" | cut -d"=" -f2)}
Moreaki

如果需要直接导出路径:export $(/usr/bin/env java -XshowSettings:properties -version 2>&1 | grep "java.home" | sed -e 's/java.home/JAVA_HOME/;s/ //g;')
Moreaki '17

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.