我刚刚在RHEL机器上安装了java。现在,我正在尝试运行一个需要设置JAVA_HOME变量的程序。找出我的java安装的安装目录然后设置JAVA_HOME的最佳方法是什么?以下是运行java-版本的结果:
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
我有一个/ usr / lib / jvm目录,但它是空的。
答案 0 :(得分:18)
RHEL使用备用子系统来管理Java安装。你可以有 安装了多个版本的java,但一次只有一个是活动的。
这意味着运行which java
不会提供有用的信息。该
无论选择哪个java安装,输出都是相同的
备择方案。正在运行readlink -f $(which java)
(已在
其他评论)或使用询问替代alternatives --display java
会
更好。
请参阅安装了OpenJDK的RHEL 6计算机示例(随附 RHEL):
[root@example ~]# which java
/usr/bin/java
[root@example ~]# readlink -f $(which java)
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64/jre/bin/java
[root@example ~]# alternatives --display java | head -2
java - status is manual.
link currently points to /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
请注意,默认情况下,环境变量JAVA_HOME
未在任何位置定义,
您需要自己在需要它的.bashrc
用户中定义它。
在前面的示例中,JAVA_HOME
的正确值将是
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86_64
。
查看Install OpenJDK中的详细信息 文档,搜索“可选:设置JAVA_HOME环境变量”部分。
答案 1 :(得分:9)
readlink
命令将显示符号链接的完整路径:
readlink -f `which java`
答案 2 :(得分:7)
首先,从命令行尝试echo $JAVA_HOME
。由于java
已经在您的路径上,因此可以设置JAVA_HOME
。
找出我的java安装的安装目录的最佳方法是什么
运行命令which java
会指向您安装java
的位置。
然后设置JAVA_HOME
您可以修改~/.bashrc
,~/.bash_profile
或/etc/profile
来设置JAVA_HOME
。在~/etc/profile
中设置它会将其设置为系统范围,这可能不是您想要的。举例来说,which java
的输出为/opt/jdk_1.7.0_25
,那么您只需将export JAVA_HOME=/opt/jdk_1.7.0_25
添加到~/.bashrc
或~/.bash_profile
,然后运行{{1} (或source ~/.bashrc
如果你在那里设置)。
请注意,在这种情况下,source ~/.bash_profile
位于java
,但在某些情况下,您需要添加PATH
以将export PATH=$PATH:$JAVA_HOME/bin
变量添加到JAVA_HOME
1}}。
答案 3 :(得分:4)
你能做的最好的事情就是完全避开Red Hat的java。
从Oracle获取java并将其放入/ opt。 然后只需创建symlink / opt / java - > / opt / jdk-someversion,并创建包含
的/etc/profile.d/java.sh#!/bin/sh
export JAVA_HOME=/opt/java
export PATH=$JAVA_HOME/bin:$PATH
然后,要更改系统范围的java,只需在opt中更改符号链接。 要使用多个java版本,请使用上述脚本和相应的JAVA_HOME。
此外,用于运行/etc/init.d脚本的/ sbin / service脚本将破坏环境变量 - 显式执行env -i。因此,即你的tomcat不会获得JAVA_HOME,你必须在$ CATALINA_BASE / bin中创建setenv.sh。
这种方法的缺点是你没有从Red Hat获得Java更新。
答案 4 :(得分:1)
我找到了一种结合上述内容的方法,以便可以以编程方式设置JAVA_HOME
。
export JAVA_HOME=$(dirname $(readlink -f $(which java))|sed 's^jre/bin^^')
在Ubuntu上,返回/ usr / lib / jvm / java-8-openjdk-amd64 /。 在CentOS7上,返回/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64/。
可以使用以下方式将其添加到Makefile中:
JAVA_HOME = $(shell dirname $$(readlink -f $$(which java))|sed 's^jre/bin^^')
这比导出硬编码路径安全得多,并且更便于携带。
答案 5 :(得分:1)
至少在RHEL 7上,alternatives
在以下位置为java_sdk
设置了从属链接:
/etc/alternatives/java_sdk/
这是指向SDK安装根目录的符号链接。