48

我正在使用 Linux Mint Cinnamon 14。我已将$JAVA_HOME$PATH环境变量设置~/.profile如下:

export JAVA_HOME=/home/aqeel/development/jdk/jdk1.6.0_35
export PATH=/home/aqeel/development/jdk/jdk1.6.0_35/bin:$PATH

然后我source ~/.profile做了适当的改变。

当我执行java -version命令检查活动的 java 版本时,它显示默认的(已经安装的 open-jdk)java 版本。如何用我下载的那个覆盖默认的 open-jdk?

更新:

which java说 /usr/bin/java

$JAVA_HOME/bin/java -version说“权限被拒绝”

sudo $JAVA_HOME/bin/java -version(然后要求输入密码)说找不到命令

但是cd $JAVA_HOME/bin,并ls表明它是正确的目录。

4

10 回答 10

67

虽然看起来您的设置是正确的,但有几件事需要检查:

  1. env- 特别是的输出PATH
  2. command -v java告诉你什么?
  3. 是否有java可执行文件,$JAVA_HOME\bin是否设置了执行位?如果不是chmod a+x java的话。

我相信source.profile在添加/更改JAVA_HOMEandPATH的?

此外,您可以通过编写以下代码来帮助自己将来维护 JDK 安装:

export JAVA_HOME=/home/aqeel/development/jdk/jdk1.6.0_35
export PATH=$JAVA_HOME/bin:$PATH

然后,您只需在设置 JDK 安装时更新一个 env 变量。

最后,您可能需要运行hash -r以清除 Bash 程序缓存。其他 shell 可能需要类似的命令。

干杯,

于 2013-01-02T10:06:35.027 回答
20

update-java-alternatives

java找不到可执行文件与您的,JAVA_HOME它只取决于您的PATH.

update-java-alternatives为整个系统管理它的好方法是通过:

update-java-alternatives -l

样本输出:

java-7-oracle 1 /usr/lib/jvm/java-7-oracle
java-8-oracle 2 /usr/lib/jvm/java-8-oracle

选择以下选项之一:

sudo update-java-alternatives -s java-7-oracle

就像update-alternatives,它通过符号链接管理工作。优点是同时管理所有 Java 实用程序的符号链接:javacjavajavap等。

我还没有看到JAVA_HOME对 JDK 的影响。到目前为止,我只看到它用于第三方工具,例如 Maven

于 2015-04-01T06:45:19.960 回答
9

如果您想使用从 Oracle 网站下载的 JDK,对我有用(使用 Mint)的是使用update-alternatives

  1. 我下载了 JDK 并将其解压缩到任何地方,例如/home/aqeel/development/jdk/jdk1.6.0_35
  2. 我跑了:

    sudo update-alternatives --install /usr/bin/java java /home/aqeel/development/jdk/jdk1.6.0_35/bin/java 1
    

    现在您可以执行sudo update-alternatives --config java选择您的 java 版本

  3. 这并没有设置我想要配置的JAVA_HOME 变量,所以我只是将它添加到我的 ~/.bashrc 中,包括一个export JAVA_HOME="/home/aqeel/development/jdk/jdk1.6.0_35"语句

现在,我下载了两个 JDK(假设第二个已提取到/home/aqeel/development/jdk/jdk-10.0.1)。

我们如何根据当前使用的 java 动态更改 JAVA_HOME?

我的解决方案不是很优雅,我很确定那里有更好的选择,但无论如何:

  1. 为了根据所选的 java 替代项动态更改 JAVA_HOME,我将此片段添加到 ~/.bashrc:

    export JAVA_HOME=$(update-alternatives --query java | grep Value: | awk -F'Value: ' '{print $2}' | awk -F'/bin/java' '{print $1}')
    

最后(这超出了范围)如果您必须不断更改 java 版本,您可能需要考虑:

  1. 为您的~./bash_aliases添加别名

    alias change-java="sudo update-alternatives --config java"
    

(您可能必须创建文件,并且可能在~/.bashrc中取消注释与此相关的部分)

于 2018-06-08T18:55:14.147 回答
4

$JAVA_HOME/bin/java -version 说“权限被拒绝”

如果您无法访问或运行代码,则将其添加到您的路径时将被忽略。您需要使其可访问和可运行,或者获取您自己的副本。

做一个

ls -ld $JAVA_HOME $JAVA_HOME/bin $JAVA_HOME/bin/java

看看为什么你不能访问或运行这个程序,。

于 2013-01-02T10:25:12.797 回答
4

当它搜索 java 时,它会从左到右查找由 : 分隔的路径条目,因此您需要在 /usr/bin 之前添加最新的 jdk/bin 目录的路径,这样当它搜索时它会找到最新的并且停止进一步搜索。

即PATH=/usr/java/jdk_1.8/bin:/usr/bin:.....等等。

然后使用命令初始化用户配置文件: source ~/.bash_profile

并检查:[which java]

你会得到正确的。

于 2014-05-25T12:10:41.290 回答
2

使用 update-alternatives 命令检查 Linux 系统上可用的 Java 版本:

 $ sudo update-alternatives --display java

现在有合适的候选者可以更改,您可以通过运行以下命令在可用的 Java JRE 之间切换默认 Java 版本:

 $ sudo update-alternatives --config java

出现提示时,选择您要使用的 Java 版本。1 或 2 或 3 等。

现在您可以验证默认 Java 版本更改如下。

 $ java -version
于 2019-01-24T05:59:03.243 回答
1

有一个简单的方法,只需从“/usr/bin”中删除符号链接。它会起作用的。

于 2013-11-20T12:18:20.293 回答
1

更新~/.profile~/.bash_profile有时不起作用。我刚刚删除了 JDK 6 和sourced .bash_profile

尝试运行这个:

sudo rm -rd jdk1.6.0_* #it may not let you delete without sudo

然后,修改/添加您的 JAVA_HOME 和 PATH 变量。

source ~/.bash_profile #assuming you've updated $JAVA_HOME and $PATH
于 2015-07-13T18:13:17.317 回答
1

尝试这个:

  • 导出 JAVA_HOME=put_here_your_java_home_path
  • 键入 export PATH=$JAVA_HOME/bin:$PATH(确保 $JAVA_HOME 是 PATH 中的第一个元素)
  • 试试 java -version

原因:可能有其他 PATH 元素指向替代 java home。如果您将首选的 JAVA_HOME 放在首位,系统将使用这个。

于 2019-06-06T17:05:13.513 回答
0

在 Linux Mint 18 Cinnamon 中,一定要检查/etc/profile.d/jdk_home.sh我将此文件重命名为 jdk_home.sh.old,现在我的路径不会继续被覆盖,我可以调用 java -version 并将 Java 9 视为预期的。即使我在update-aternatives --config java这个 jdk_home.sh 文件中正确选择了 Java 9,在启动时仍然会覆盖 $PATH。

于 2017-12-09T20:23:03.003 回答