设置了JAVA_HOME和PATH,但是java -version仍然显示旧的

时间:2013-01-02 09:58:45

标签: java linux environment-variables linuxmint

我正在使用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/binls表明它是正确的目录。

11 个答案:

答案 0 :(得分:60)

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

  1. env的输出 - 特别是PATH
  2. command -v java告诉你什么?
  3. java中是否有$JAVA_HOME\bin个可执行文件并且是否设置了执行位?如果不是chmod a+x java它。
  4. 我相信您在添加/更改source.profile之后JAVA_HOMEPATH了吗?

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

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

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

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

    干杯,

答案 1 :(得分:15)

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等。

我还没有看到JDK的JAVA_HOME效果。到目前为止,我只看到它用于第三方工具e.g. Maven

答案 2 :(得分:4)

  

$ JAVA_HOME / bin / java -version说'Permission Denied'

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

做一个

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

了解您无法访问或运行此程序的原因,。

答案 3 :(得分:3)

当它搜索java时,它在路径条目中从左到右查找,这些条目由/分开:所以你需要在/ usr / bin之前添加最新的jdk / bin目录的路径,所以当它搜索时它会找到它最新的一个并停止进一步搜索。

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

然后使用命令:source~ / .bash_profile

初始化用户配置文件

并查看:[哪个java]

你会得到正确的。

答案 4 :(得分:3)

如果您想使用从Oracle网站下载的JDK ,那么对我(使用Mint)有用的是 update-alternatives :< / p>

  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"语句
  4. 现在,我已经下载了两个JDK (假设第二个已被提取到 /home/aqeel/development/jdk/jdk-10.0.1 )。 / p>

    我们如何根据当前使用的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}')
      
    2. 最后(这不在范围内)如果你不得不经常更改java版本,你可能要考虑:

      1. 在您的〜。/ bash_aliases 中添加别名

        alias change-java="sudo update-alternatives --config java"
        
      2. (您可能需要创建该文件,并可能在〜/ .bashrc 中取消注释与此相关的部分)

答案 5 :(得分:0)

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

答案 6 :(得分:0)

有时更新~/.profile~/.bash_profile不起作用。我刚刚删除了JDK 6和source d .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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

 $ sudo update-alternatives --display java

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

 $ sudo update-alternatives --config java

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

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

 $ java -version

答案 9 :(得分:0)

尝试一下:

  • export JAVA_HOME =在此处放置您的java_home_path
  • 键入export PATH = $ JAVA_HOME / bin:$ PATH(确保$ JAVA_HOME是PATH中的第一个元素)
  • 尝试java -version

原因:可能还有其他PATH元素指向替代java home。如果您首先输入自己喜欢的JAVA_HOME,则系统将使用该名称。

答案 10 :(得分:-2)

最简单的方法是删除链接或编辑/ usr / bin / java。这有一个在上述路径上执行java的调用。