我正在使用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
表明它是正确的目录。
答案 0 :(得分:60)
虽然看起来您的设置是正确的,但有几件事需要检查:
env
的输出 - 特别是PATH
。command -v java
告诉你什么?java
中是否有$JAVA_HOME\bin
个可执行文件并且是否设置了执行位?如果不是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安装时更新一个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实用程序的符号链接:javac
,java
,javap
等。
我还没有看到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>
我跑了:
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版本。
export JAVA_HOME="/home/aqeel/development/jdk/jdk1.6.0_35"
语句现在,我已经下载了两个JDK (假设第二个已被提取到 /home/aqeel/development/jdk/jdk-10.0.1 )。 / p>
我们如何根据当前使用的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 中取消注释与此相关的部分)
答案 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)
尝试一下:
原因:可能还有其他PATH元素指向替代java home。如果您首先输入自己喜欢的JAVA_HOME,则系统将使用该名称。
答案 10 :(得分:-2)
最简单的方法是删除链接或编辑/ usr / bin / java。这有一个在上述路径上执行java的调用。