如何在Linux中为所有用户设置JAVA_HOME

290

我是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位于哪个位置?

25个回答

534
  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 立即应用更改。

43
请勿忘记删除双引号并从您的键盘重新创建它们,因为仅复制和粘贴可能会引起问题。原意不变,语言更通俗易懂。 - Sunil Kumar
18
有些应用程序依赖于JAVA_HOME,设置它也无妨。 - raffian
4
IntelliJ是一个重要的应用程序,而不是小型应用程序。 - Pieter van den Ham
24
如果要立即生效,您需要运行source /etc/profile - Mohamed Taher Alrefaie
7
按下“Esc”键进入命令模式,然后键入“:w”并按下“Enter”即可保存更新内容。 - RocketRuwan
显示剩余14条评论

174

对于所有用户,我建议在/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::")

这将动态更新,并与 alternatives 系统很好地配合使用。但请注意,更新仅会在新的登录 shell 中进行。


24
为了符合仅使用普通JRE(即使是Headless),请使用export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::"),注意我只使用java而不是javac - Roman Kruglov
@occulta 至少 Maven 需要 JAVA_HOME 指向 JDK 并使用它来定位 Java 编译器。 - Eero Aaltonen
1
支持 readlink 并更新/升级兼容解决方案,即使这是一个5年前的帖子也要点赞。我只建议不要编辑 /etc/profile,而是将您的导出放在自定义文件中,例如 /etc/profile.d/java_environment.sh,可能需要 chmod +x java_environment.sh 并重新启动。 - ChristophS
完美。比我笨拙的dirname解决方案更好。如果你像我一样想要理解这里发生了什么,那么这是将输入中匹配的文本替换为空字符串的简单替换。替换的“默认”字符是“/”,但只要保持一致,就可以用任何字符替换“/”。在这种情况下,我们使用“/”作为路径分隔符,因此替换为冒号。 - Ungeheuer

45

您可以使用 /etc/profile 或者更好的方式是使用像 /etc/profile.d/jdk_home.sh 这样的文件。

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

请记住,此文件仅在新登录 shell 中加载。因此,在执行 bash -l 或新的 gnome-session 之后,它不会随着新的 Java 版本而更改。


1
在我的Linux(Raspbian)中,/etc/profile将源代码/etc/profile.d/*.sh,因此您的文件需要命名为jdk_home.sh以便它被源代码。 - Hilikus
谢谢@Hilikus :-) 我已经相应地进行了更改。 - flob
2
谢谢。我结合了你和@Eero的答案,取长补短,达到了最佳效果 ;) - Hilikus
1
/etc/profile.d/jdk_home.sh是一个更加干净的答案,至少对于Ubuntu来说是这样,/etc/profile已经有很多逻辑了。在其上添加更多似乎不是明智的选择... - Ng Sek Long

38

在RHEL 7中,其他答案对我都不起作用,即使直接在/etc/profile~/.bash_profile中设置JAVA_HOMEPATH也无效。每次我尝试检查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/

我在RHEL 7上也有同样的经历。我从~/.bash_profile中删除了exports并采用了这种方法。 - xpagesbeast
在您的 jdk_home.sh 中不需要 #!/bin/sh。一旦完成配置,请确保注销并重新登录。 - kuhajeyan
此外,在Linux操作系统中,使用默认的jvm符号链接作为java_home环境变量的目标可能是一个不错的选择。https://dev59.com/xnRB5IYBdhLWcg3wUFrB - Alkanshel

36
  1. 打开终端并输入 sudo gedit .bashrc

  2. 它会要求您输入密码。输入密码后,它将打开bash文件。然后转到末尾并输入:

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

以上是针对单个用户的操作。对于所有用户,您需要按照以下步骤进行操作:
  1. sudo gedit /etc/profile

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

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


2
此答案仅为当前用户设置。 - Manuel Manhart
1
@AdamHughes 这是针对Unix系统的。不确定您所说的系统是哪个。 - PyDevSRS

15

复制您安装的二进制文件路径

YOUR PATH
打开终端并输入以下命令编辑环境文件。
sudo nano /etc/environment
在此文件中,添加以下行(用刚复制的路径替换YOUR_PATH):
JAVA_HOME="YOUR_PATH"

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

source /etc/environment

现在执行以下命令进行测试:

echo $JAVA_HOME

5
仅影响当前终端会话。 - Fatih Türker
1
@FatihTürker 重新启动你的电脑。 - Jack G
1
对于我使用jdk11,YOUR_PATH是/usr/lib/jvm/default-java/ - Jack G
1
JAVA_HOME路径已设置,但它不起作用。即Java不起作用。即使重新启动后仍然如此。 - Gilbert

10

首先,您需要确定计算机安装了哪个Java版本以及应该使用哪个版本。 为此,请使用具有根权限的终端打开。

 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

9

之前的回答是正确的。但是就以下问题而言,没有一个答案是完整的:

  1. 不建议更改 /etc/profile 文件,原因如下 ( 在 /etc/profile 中说明):
  • 除非您知道自己在做什么,否则不建议更改此文件。最好创建一个名为 custom.sh 的 shell 脚本放在 /etc/profile.d/ 中,以对环境进行定制。这将避免在未来更新时需要合并文件。
  1. 所以按照上述方法创建 /etc/profile.d/custom.sh 文件进行自定义更改。

  2. 现在,为了始终与安装的新版本 Java 保持同步,永远不要使用绝对路径,相反,请使用:

#如果将 jdk 作为 java home

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

或者

#如果将 jre 作为 java home

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

  1. 记得在 custom.sh 文件中添加#! /bin/bash

8

做Oracle所做的事情(作为一名前Sun员工,我还没有习惯这个)

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

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


5

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

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 + Alt + T打开终端

5...使用以下命令验证JAVA_HOME的安装情况:

echo $JAVA_HOME

flob那里抄来的一句话,感谢他们提供的贡献。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接