我刚接触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"

其他回答

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

步骤1 -通过echo $JAVA_HOME检查当前java版本

第二步vim /etc/简介

步骤3 -在文件的末尾你会发现 export JAVA_HOME时,我们需要在这里提供新的路径,确保它不是相对的。

步骤4—保存并退出:wq

步骤5 -“source /etc/profile/”,这将执行更改

第6步-再次执行echo $JAVA_HOME -更改将被反映。

复制您安装的bin文件路径

YOUR PATH

打开终端,输入以下命令编辑环境文件,

sudo nano /etc/environment

在这个文件中,添加以下行(将YOUR_PATH替换为刚才复制的路径):

JAVA_HOME="YOUR_PATH"

这应该足以设置环境变量。现在重新加载这个文件:

source /etc/environment

现在通过执行以下命令来测试:

echo $JAVA_HOME

对于所有用户,我建议在/etc/profile.d/java_home.sh中按以下行创建一个文件

# Set JDK installation directory according to selected Java compiler

export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

这将动态更新,并与替代系统一起很好地工作。不过请注意,更新只会发生在新的登录shell中。

这是一个非常简单的解决问题的脚本

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

测试方面:

echo $JAVA_HOME