有什么linux命令可以用来找出
JAVA_HOME
目录吗?我尝试打印出环境变量(“env”),但找不到目录。
在 Linux 上您可以运行
$(dirname $(dirname $(readlink -f $(which javac))))
在 Mac 上您可以运行
$(dirname $(readlink $(which javac)))/java_home
我不确定窗户,但我想
where javac
会让你非常接近
这是另一个解决方案,这是跨平台的(使用
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"
echo $JAVA_HOME
将打印该值。但是,如果您没有在启动脚本中手动设置它,则它可能未设置。
如果您尝试
which java
但没有找到任何内容,则 Java 可能未安装在您的计算机上,或者至少不在您的路径中。根据您使用的 Linux 发行版以及您是否具有 root 访问权限,您可以前往 http://www.java.com 下载您需要的版本。然后,您可以将JAVA_HOME设置为指向该目录。请记住,这只是一个约定,不应用于确定是否安装了 java。
我知道这已经晚了,但是这个命令会搜索 /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
显示您使用的环境变量的值:
回显$VARIABLE
所以在你的情况下将是:
回显$JAVA_HOME
如果您没有设置,您可以在您的
.bashrc
文件中添加:
导出 JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
当您更新软件包时它会动态变化。
如果您的环境中定义了
$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)
在终端上,输入:
回显“$JAVA_HOME”
如果您没有得到任何信息,则说明您的环境变量 JAVA_HOME 尚未设置。您可以尝试使用“locate java”来尝试查找您的 Java 安装位置。
你设置JAVA_HOME了吗
这里有一个改进,仅将目录抓取到标准输出:
java -XshowSettings:properties -version 2>&1 \
| sed '/^[[:space:]]*java\.home/!d;s/^[[:space:]]*java\.home[[:space:]]*=[[:space:]]*//'
您可以通过执行此命令从命令行进行检查
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
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)
http://www.gnu.org/software/sed/manual/html_node/Print-bash-environment.html#Print-bash-environment
如果您确实想获取有关 BASH 的一些信息,请将该脚本放入您的 .bashrc 中并观察它的运行。您可以滚动并查看它。