找到JAVA_HOME并将其设置为RHEL

找到JAVA_HOME并将其设置为RHEL,java,linux,Java,Linux,我刚才在RHEL机器上安装了java。现在,我正在尝试运行一个程序,该程序需要设置JAVA_HOME变量。找出java安装的安装目录,然后将java_设置为主页的最佳方法是什么?以下是运行java-version的结果: 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

我刚才在RHEL机器上安装了java。现在,我正在尝试运行一个程序,该程序需要设置JAVA_HOME变量。找出java安装的安装目录,然后将java_设置为主页的最佳方法是什么?以下是运行java-version的结果:

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

首先,从命令行尝试
echo$JAVA\u HOME
。由于
java
已经在您的路径上,因此可以设置
java\u HOME

确定java安装目录的最佳方法是什么

运行命令
whichjava
将指向安装
java
的位置

然后将JAVA_设置为HOME

您可以编辑
~/.bashrc
~/.bash\u profile
,或
/etc/profile
来设置
JAVA\u HOME
。在
~/etc/profile
中设置它将在系统范围内设置它,这可能不是您想要的。举例来说,
which java
的输出是
/opt/jdk_1.7.0_25
,那么您只需将
export java_HOME=/opt/jdk_1.7.0_25
添加到
~/.bashrc
~/.bash_profile
,然后运行
source~/.bashrc
(或者
source~/.bash_profile
,如果您在那里设置的话)


注意,在这种情况下,
java
位于
PATH
上,但在某些情况下,您需要添加
export PATH=$PATH:$java\u HOME/bin
java\u HOME
变量添加到
PATH

readlink
命令将显示符号链接的完整路径:

readlink -f `which java`

RHEL使用替代子系统来管理java安装。你可以 安装了多个java版本,但一次只有一个处于活动状态

这意味着运行
哪个java
不能提供有用的信息。这个 无论通过选择哪个java安装,输出都是相同的 选择。正在运行
readlink-f$(哪个java)
(如中所示 其他注释)或使用询问备选方案
备选方案--display java
将 更好

请参阅安装了OpenJDK的RHEL 6机器的示例(随附) RHEL):

请注意,默认情况下,环境变量
JAVA\u HOME
未在任何位置定义, 您需要自己在需要它的用户的
.bashrc
中定义它

在前面的示例中,
JAVA\u HOME
的正确值为
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.79.x86\u 64

请参阅中的详细信息
在文档中,搜索“可选:设置JAVA_HOME环境变量”部分。

您最好避免使用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中更改symlink。 要使用多个java版本,请在适当的java_HOME中使用上述脚本

此外,用于运行/etc/init.d脚本的/sbin/service脚本将删除环境变量-显式执行env-i。因此,也就是说,您的tomcat将无法获得JAVA_主页,您必须在$CATALINA_BASE/bin中创建setenv.sh


这种方法的缺点是您无法从Red Hat获得java更新。

我找到了一种方法来组合上述内容,以便可以编程设置
java\u 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^^')

这比导出硬编码路径要安全得多,而且更便于携带。

至少在RHEL 7上,
备选方案
在以下位置为
java_sdk设置从属链接:

/etc/alternations/java_sdk/


这是指向SDK安装根目录的符号链接。

java给我的是:/usr/bin/java。但是,当我尝试浏览到此文件夹时,它不存在。我可以找到/usr/bin,但里面没有java。通常,
/usr/bin/java
是指向文件系统上其他地方的
java
二进制文件的符号链接。如果在
/usr/bin
中运行
ls-l
,则没有
java
实用程序?好的,我设置了-export java_HOME=/usr,并且我试图运行的程序(pig)工作正常(它在脚本中添加了/bin/java)。所以,它现在可以工作了,但是将它设置为/usr对我来说似乎不合适。。让我知道这是否危险或任何事情很高兴听到你让它工作。我试着打开一个终端,
cd/usr/bin
。然后运行
ls-l | grep java
,它应该显示
/usr/bin/java
指向的位置。您希望它成为您的
JAVA\u主页
。我不认为你所拥有的东西是危险的,但它可能会给那些使用
JAVA_HOME
的东西带来问题,比如
javac
中可能有或可能没有链接到它们的
/usr/bin
你也可以通过运行
readlink-f$(哪个JAVA))
来定位JAVA二进制文件。这对于基于JAVA(路径中)创建JAVA_HOME环境变量非常有用:
export JAVA_HOME=$(dirname$(dirname$(readlink-f$(which JAVA)))
。归功于:
JAVA_HOME = $(shell dirname $$(readlink -f $$(which java))|sed 's^jre/bin^^')