JAVA_HOME 和 PATH 已设置,但 java -version 仍然显示旧版本
- 2024-11-01 08:41:00
- admin 原创
- 55
问题描述:
我正在使用 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
表明它是正确的目录。
解决方案 1:
虽然您的设置似乎正确,但仍有几件事需要检查:
的输出
env
-具体来说PATH
。command -v java
告诉你什么?是否有
java
可执行文件$JAVA_HOMEin
并且是否设置了执行位?如果没有chmod a+x java
。
我相信您在添加/更改和之后已经source
完成了?.profile
`JAVA_HOME`PATH
另外,您可以通过以下方式帮助自己将来维护 JDK 安装:
export JAVA_HOME=/home/aqeel/development/jdk/jdk1.6.0_35
export PATH=$JAVA_HOME/bin:$PATH
然后,您只需要在设置 JDK 安装时更新一个环境变量。
最后,您可能需要运行hash -r
以清除 Bash 程序缓存。其他 shell 可能需要类似的命令。
干杯,
解决方案 2:
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 实用程序的符号链接:、、javac
等。java
`javap`
我还没有看到它对JAVA_HOME
JDK 的影响。到目前为止,我只看到它用于第三方工具,例如 Maven。
解决方案 3:
如果您想使用从 Oracle 网站下载的 JDK,那么对我而言(使用 Mint)有效的方法是使用update-alternatives:
我下载了 JDK 并将其解压到任何地方,例如/home/aqeel/development/jdk/jdk1.6.0_35
我跑了:
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 版本。
这并没有设置我想要配置的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?
我的解决方案不是很优雅,我很确定还有更好的选择,但无论如何:
为了根据所选的 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 版本,您可能需要考虑:
向您的~./bash_aliases添加别名:
alias change-java="sudo update-alternatives --config java"
(您可能必须创建该文件,并且可能取消注释~/.bashrc中与此相关的部分)
解决方案 4:
$JAVA_HOME/bin/java -version 显示“权限被拒绝”
如果您无法访问或运行代码,则将其添加到路径中将被忽略。您需要使其可访问和可运行,或者获取您自己的副本。
做一个
ls -ld $JAVA_HOME $JAVA_HOME/bin $JAVA_HOME/bin/java
了解为什么您无法访问或运行该程序。
解决方案 5:
当它搜索 java 时,它会在以 : 分隔的路径条目中从左到右查找,因此您需要在 /usr/bin 之前添加最新的 jdk/bin 目录的路径,这样当它搜索时它会找到最新的并停止进一步搜索。
即 PATH=/usr/java/jdk_1.8/bin:/usr/bin:..... 等等。
然后使用命令初始化用户配置文件:source ~/.bash_profile
并使用以下方法检查:[which java]
你会找到正确的那个。
解决方案 6:
尝试一下:
导出JAVA_HOME=put_here_your_java_home_path
类型 export PATH=$JAVA_HOME/bin:$PATH (确保 $JAVA_HOME 是 PATH 中的第一个元素)
尝试 java -版本
原因:可能有其他 PATH 元素指向替代的 java home。如果您首先输入首选的 JAVA_HOME,系统将使用这个。
解决方案 7:
使用 update-alternatives 命令检查 Linux 系统上可用的 Java 版本:
$ sudo update-alternatives --display java
既然有了合适的候选版本可供更改,您可以通过运行以下命令在可用的 Java JRE 之间切换默认 Java 版本:
$ sudo update-alternatives --config java
出现提示时,选择您想要使用的 Java 版本。1、2、3 等。
现在您可以验证默认 Java 版本是否发生了如下变化。
$ java -version
解决方案 8:
有一个简单的方法,只需从“/usr/bin”中删除符号链接即可。这样就可以了。
解决方案 9:
有时更新~/.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
解决方案 10:
在 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 仍然会被覆盖。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件