Linux 中的 JAVA_HOME 目录

问题描述 投票:0回答:12

有什么linux命令可以用来找出

JAVA_HOME
目录吗?我尝试打印出环境变量(“env”),但找不到目录。

java linux directory
12个回答
118
投票

在 Linux 上您可以运行

$(dirname $(dirname $(readlink -f $(which javac))))

在 Mac 上您可以运行

$(dirname $(readlink $(which javac)))/java_home

我不确定窗户,但我想

where javac
会让你非常接近


88
投票

这是另一个解决方案,这是跨平台的(使用

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"

69
投票
如果已设置,

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

如果您尝试

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


35
投票

我知道这已经晚了,但是这个命令会搜索 /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


12
投票

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

回显$VARIABLE

所以在你的情况下将是:

回显$JAVA_HOME

如果您没有设置,您可以在您的

.bashrc
文件中添加:

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

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


10
投票

如果您的环境中定义了

$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)

3
投票

在终端上,输入:

回显“$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-install-dir

2
投票

这里有一个改进,仅将目录抓取到标准输出:

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

1
投票

您可以通过执行此命令从命令行进行检查

echo $JAVA_HOME
。如果安装了 Java 但未设置路径,则需要确定 Java 安装的路径。我更喜欢使用
sudo update-alternatives --config java
,它列出了所有已安装的版本,并标记了当前活动的版本,并提供了切换对话框:

有 3 个程序提供“java”。

  选择命令
-----------------------------------------------------------
   1 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.14.0.9-2.fc35.x86_64/bin/java)
   2 java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.2.0.8-1.fc35.x86_64/bin/java)
*+ 3 /usr/java/jdk-17.0.2/bin/java

Enter 保留当前选择[+],或输入选择编号:

从上面的列表中,您可以选择您想要作为默认版本的java。例如,要将

JAVA_HOME
设置为选项 3,您可以这样做
export JAVA_HOME=/usr/java/jdk-17.0.2


0
投票
export JAVA_HOME=$(realpath $(which java) | sed 's/\/bin\/.*//')

说明:

  • realpath
    获取解析符号链接的绝对路径
  • sed 's/\/bin\/.*//'
    删除路径中
    /bin
    上的所有内容

等价:

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

(信用:https://stackoverflow.com/a/29622512/2314737

(假设已安装Java)


-1
投票

http://www.gnu.org/software/sed/manual/html_node/Print-bash-environment.html#Print-bash-environment

如果您确实想获取有关 BASH 的一些信息,请将该脚本放入您的 .bashrc 中并观察它的运行。您可以滚动并查看它。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.