找到JAVA_HOME并在RHEL上设置它

时间:2014-03-10 01:18:24

标签: java linux

我刚刚在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目录,但它是空的。

6 个答案:

答案 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安装根目录的符号链接。