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

43 java linux environment-variables linux-mint

我使用Linux Mint的肉桂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
Run Code Online (Sandbox Code Playgroud)

然后我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表明它是正确的目录.

And*_*rup 62

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

  1. 输出env- 具体来说PATH.
  2. command -v java 告诉你什么?
  3. 是否有java可执行文件$JAVA_HOME\bin并且是否设置了执行位?如果没有chmod a+x java.

我相信你source倒是你.profile添加/更改后JAVA_HOMEPATH

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

export JAVA_HOME=/home/aqeel/development/jdk/jdk1.6.0_35
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

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

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

干杯,

  • 导出PATH时,将$ PATH本身作为最后一个参数.否则你可能仍会参考旧的. (2认同)

Cir*_*四事件 16

update-java-alternatives

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

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

update-java-alternatives -l
Run Code Online (Sandbox Code Playgroud)

样本输出:

java-7-oracle 1 /usr/lib/jvm/java-7-oracle
java-8-oracle 2 /usr/lib/jvm/java-8-oracle
Run Code Online (Sandbox Code Playgroud)

选择其中一个替代方案:

sudo update-java-alternatives -s java-7-oracle
Run Code Online (Sandbox Code Playgroud)

比如update-alternatives,它通过符号链接管理工作.:其优点是,在一次管理符号链接到所有的Java工具javac,java,javap,等.

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


Ger*_*oza 6

如果您想使用从 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
    
    Run Code Online (Sandbox Code Playgroud)

    现在您可以执行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}')
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    alias change-java="sudo update-alternatives --config java"
    
    Run Code Online (Sandbox Code Playgroud)

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