我刚接触Linux系统,似乎有太多的Java文件夹。

Java -version给我:

Java版本“1.7.0_55” OpenJDK运行时环境(rhel-2.4.7.1。el6_5-x86_64 u55-b13) OpenJDK 64位服务器虚拟机(build 24.51-b03,混合模式)

当我试图构建一个Maven项目时,我得到了错误:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

请问root用户和非root用户需要修改哪些文件,java到底在哪里?


当前回答

所有操作步骤(找到java,父目录,编辑文件,…)一个解决方案

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

结果:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

解释:

1)让我们把完整的命令分解成几个部分

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2)从java命令中找到java路径

# $(which java)
"/usr/bin/java"

3)由符号路径得到相对路径

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4)获取/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java的父路径

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5)获取“/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/”的父路径

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"

其他回答

如果不奏效,试试这个:

apt install openjdk-8-jdk-headless

作为回答,因为我没有评论的权利。

注意事项:遵循“That Dave Guy”发布的接受答案。

在设置变量之后,请确保对安装它的java目录设置了适当的权限。

chmod -R 755 /usr/java

您可以使用/etc/profile或类似/etc/profile.d/jdk_home.sh的文件

export JAVA_HOME=/usr/java/jdk1.7.0_05/

你必须记住,这个文件只加载了新的登录shell ..所以在bash -l或一个新的gnome-session之后,它不会随着新的Java版本而改变。

在/etc/profile中,如果你打开这个文件,你会知道不建议在这个文件上写东西。与其这样做,不如把你的命令脚本(假设test.sh)放到/etc/profile.然后把test.sh放在那里。每次实例重新启动时,/etc/profile都会自动调用它

在RHEL 7中,没有一个其他答案对我来说是“坚持”的,甚至直接在/etc/profile或~/中设置JAVA_HOME和PATH。Bash_profile将不起作用。每次我试图检查是否设置了JAVA_HOME时,都会出现空白:

$ echo $JAVA_HOME
    (<-- no output)

我要做的是在/etc/profile.d/jdk_home.sh中设置一个脚本:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

我最初忽略了第一行(#!/bin/sh),没有它它就不能工作。

现在它开始工作了:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/