Linux中的JAVA_HOME目录

Pro*_*mer 61 java linux directory

有没有我可以用来查找JAVA_HOME目录的linux命令?我已经尝试打印出环境变量("env")但我找不到该目录.

jsd*_*vel 74

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

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

我不确定窗户,但我where javac想会让你非常接近

  • 这是一个很好的解决方案,但是请记住使用readlink的规范标志,因为Java可以设置多个链接,所以在Linux上使用`$(dirname $(dirname $(readlink -f $(哪个javac))))`代替 (6认同)
  • 这是找到任何家庭路径的最佳解决方案。我经常将它用于 java、maven 等等!谢谢! (2认同)
  • 啊,没关系,前面有一个 echo 的意图就更清楚了:`echo $(dirname $(dirname $(readlink -f $(which javac))))` (2认同)

Ada*_*amC 54

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

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

  • JAVA_HOME不再在Linux系统中定义,不推荐使用. (6认同)
  • @PeterQuiring你应该引用你的声明来源......你错了. (3认同)
  • @harschware当我安装Ubuntu时,即使安装了JDK,也没有设置JAVA_HOME.另请阅读/ usr/share/doc/openjdk-8-jre-headless/JAVA_HOME,它说不再需要JAVA_HOME(遗留). (2认同)

cev*_*ris 34

我知道这已经晚了,但是这个命令会搜索/ usr /目录来为你找到java

sudo find /usr/ -name *jdk
Run Code Online (Sandbox Code Playgroud)

结果来了

/usr/lib/jvm/java-6-openjdk
/usr/lib/jvm/java-1.6.0-openjdk
Run Code Online (Sandbox Code Playgroud)

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

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


Par*_*tra 31

只是另一种解决方案,这是一个跨平台(使用java),并指向jre的位置.

java -XshowSettings:properties -version 2>&1 > /dev/null | grep 'java.home'
Run Code Online (Sandbox Code Playgroud)

输出所有java的当前设置,并找到一个被调用的设置java.home.

对于Windows,你可以使用findstr而不是grep.

java -XshowSettings:properties -version 2>&1 | findstr "java.home"
Run Code Online (Sandbox Code Playgroud)

  • 我已经研究了很多寻找JAVA_HOME的方法,我认为这是最好的方法之一!谢谢你提到它! (2认同)
  • 神圣的moly这个比其他所有人都好,谢谢! (2认同)

Pau*_*lgo 10

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

echo $ VARIABLE

所以在你的情况下将是:

echo $ JAVA_HOME

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

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

它会在您更新包时动态更改.


dno*_*zay 9

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

$ echo $JAVA_HOME
$ # I am not lucky...
Run Code Online (Sandbox Code Playgroud)

你可以从加载的类中猜出来.

$ 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]
Run Code Online (Sandbox Code Playgroud)

此方法可确保在有多个安装的情况下找到正确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)
Run Code Online (Sandbox Code Playgroud)