239

我是 Linux 系统的新手,Java 文件夹似乎太多了。

java -version 给了我:

  • java版本“1.7.0_55”
  • OpenJDK 运行时环境 (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • OpenJDK 64 位服务器 VM(内部版本 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 的确切位置?

4

22 回答 22

458
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    如果以非特权用户身份登录,则添加 sudo,即。sudo vim

  3. 按“i”进入插入模式
  4. 添加:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
    
  5. 注销并再次登录、重新启动或用于source /etc/profile立即在当前 shell 中应用更改
于 2014-07-08T21:07:57.417 回答
149

对于所有用户,我建议在/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 中进行。

于 2015-04-14T08:26:36.950 回答
40

您可以使用 /etc/profile 或更好的文件,例如 /etc/profile.d/jdk_home.sh

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

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

于 2014-07-08T21:07:15.393 回答
33

在 RHEL 7 中,没有其他答案对我来说是“坚持”的,即使直接设置JAVA_HOME或无法工作。每次我尝试检查是否设置时,它都会出现空白:PATH/etc/profile~/.bash_profileJAVA_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/
于 2015-12-08T01:06:32.640 回答
21
  1. 打开终端并输入 sudo gedit .bashrc

  2. 它会询问您的密码。输入密码后,它将打开 bash 文件。然后转到结尾并输入:

    export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
    export PATH=$PATH:$JAVA_HOME/bin
    
  3. 然后保存文件并退出文件

以上是针对单个用户的。对于所有用户,您必须按照以下步骤操作

  1. gedit /etc/profile

  2. export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

  3. export PATH=$PATH:$JAVA_HOME/bin

于 2016-09-25T19:44:30.563 回答
11

复制你安装的bin文件路径

YOUR PATH

通过键入以下命令打开终端并编辑环境文件,

sudo nano /etc/environment

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

JAVA_HOME="YOUR_PATH"

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

source /etc/environment

现在通过执行测试它:

echo $JAVA_HOME
于 2015-08-03T11:42:05.110 回答
8

做 Oracle 所做的事情(作为一名前 Sun 员工,我无法适应那个)

ln -s latestJavaRelease /usr/java/default
其中 latestJavaRelease 是您要使用的版本

然后导出 JAVA_HOME=/usr/java/default

于 2014-10-31T16:46:38.880 回答
8

给出的答案是以前的帖子是有效的。但没有一个答案是完整的:

  1. 不推荐更改 /etc/profile 仅仅是因为原因(如 /etc/profile 中所述):
  • 除非您知道自己在做什么,否则更改此文件不是一个好主意。最好在 /etc/profile.d/ 中创建一个 custom.sh shell 脚本来对您的环境进行自定义更改,因为这样可以避免在未来的更新中进行合并。*
  1. 因此,如上所述,为自定义更改创建 /etc/profile.d/custom.sh 文件。

  2. 现在,要始终与安装的较新版本的 Java 保持更新,请不要放置绝对路径,而是使用:

#if 将 jdk 作为 java home

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

或者

#if 将 jre 作为 java home

导出 JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")

  1. 记得有#!/bin/bash在 custom.sh 文件上
于 2017-09-15T05:14:08.647 回答
5

首先,您需要找出您的 PC 中安装了哪些 Java 以及要使用哪一个。对于具有 root 权限的打开终端。

 sudo su

 ls /usr/lib/jvm/

现在它将列出可用的 java 版本。选择列出的版本。

复制路径直到那里。

现在打开 bashrc

  nano ~/.bashrc

将以下命令添加到末尾

 export JAVA_HOME="path that you copied"

  export PATH=$JAVA_HOME/bin:$PATH

之后保存文件并按 Ctrl+S 然后按 Ctrl+X 退出

现在运行以下命令:

  source ~/.bashrc
于 2021-04-12T07:52:14.973 回答
4

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

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

并用于测试:

echo $JAVA_HOME
于 2017-04-13T15:43:12.567 回答
4

1 ...使用快捷键Ctlr++打开终端AltT

2...执行以下命令:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ...(推荐)重新启动您的虚拟机/计算机。source /etc/source如果不想重新启动计算机,您可以使用

4 ...使用快捷键Ctlr++打开终端AltT

5...验证 JAVA_HOME 安装

echo $JAVA_HOME

来自flob的单行副本,归功于他们

于 2019-09-27T09:03:38.993 回答
4

发布为答案,因为我无权发表评论。

注意事项:遵循“那个戴夫盖伊”发布的公认答案。

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

chmod -R 755 /usr/java
于 2017-09-18T08:50:25.800 回答
4

所有操作步骤(查找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"
于 2020-05-30T15:49:35.907 回答
3

第 1 步 - 通过“echo $JAVA_HOME”检查当前的 Java 版本

第 2 步 - vim /etc/profile

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

第 4 步 - 保存并退出 :wq

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

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

于 2018-10-31T11:52:54.177 回答
2

获取您编辑的任何配置文件以节省必须使用新登录名可能是一个好主意。

或者:源 /etc/ 或 . /ETC/

您编辑的个人资料在哪里。

于 2015-06-09T00:35:15.937 回答
2

在我们设置 JAVA_HOME 的同时,让我分享一些设置 JAVA_HOME 或任何其他环境变量的好处:

1)升级JDK很容易,不会影响您的应用程序启动和指向JAVA_HOME的配置文件。您只需要下载新版本并确保您的 JAVA_HOME 指向新版本的 Java。这是使用环境变量或链接的最大好处。

2) JAVA_HOME 变量短而简洁,而不是JDK安装目录的完整路径。

3) JAVA_HOME 变量是平台无关的,即如果你的启动脚本使用 JAVA_HOME,那么它可以在 Windows 和 UNIX 上运行而无需任何修改,你只需要在各自的操作系统上设置 JAVA_HOME。

阅读更多:http: //javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH

于 2016-06-14T05:51:01.947 回答
2

在 Linux 上,我将此行添加到我的 ~/.profile 中:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)
于 2015-11-04T11:49:15.130 回答
2

在 /etc/profile 中,如果您打开它,您会知道不建议在该文件上写入。而不是让你的命令脚本(假设 test.sh)转到 /etc/profile.d 文件夹并将 test.sh 放在那里。每次实例重启时,它都会被 /etc/profile 自动调用。

于 2020-06-12T12:55:28.913 回答
1

使用 SDKMAN sdkman.io来切换 btw。你的sdk。

它为您设置 JAVA_HOME。

于 2020-01-23T13:52:50.607 回答
1

用 sudo打开kafka-run-class.sh来写

您可以在您的 kafka 文件夹中找到kafka-run-class.sh:kafka/bin/kafka-run-class.sh

检查这些行

在此处输入图像描述

修改 else 部分中的 JAVA 变量以指向您的 java/bin 中的 java 可执行文件。像JAVA="$JAVA_HOME/java"

于 2020-04-16T17:18:22.367 回答
0

对于新用户来说,使用 vim 可能有点困难。我们可以改用 gedit 文本编辑器。

  1. 找到/usr/lib/jvm/java-1.xx-openjdk

  2. 如果以非特权身份登录,请输入“gedit /etc/profile”或使用“sudo gedit /etc/profile”

  3. 在行尾添加以下内容:

    export JAVA_HOME="你找到的路径"

    导出 PATH=$JAVA_HOME/bin:$PATH

  4. 在当前 shell 中输入“source /etc/profile”以应用更改

于 2021-07-03T22:44:15.320 回答
-1

我使用这条线:

export JAVA_HOME=$(readlink -f $(dirname $(readlink -f $(which java) ))/../)

到我的 ~/.profile 所以它在登录时使用默认 java 目录的基础。这是为了 bash。

于 2015-07-15T01:21:10.300 回答