JDK 版本(jdk1.7.0_21 和 jdk1.7.0_55)
像下面这样安装和配置。
jdk1.7.0_21
update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.7.0_21/bin/java" 1
update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7.0_21/bin/javac" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.7.0_21/bin/javaws" 1
sudo chmod a+x /usr/bin/java
sudo chmod a+x /usr/bin/javac
sudo chmod a+x /usr/bin/javaws
sudo chown -R root:root /usr/lib/jvm/jdk1.7.0_21
jdk1.7.0_55
update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.7.0_55/bin/java" 1
update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7.0_55/bin/javac" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.7.0_55/bin/javaws" 1
sudo chmod a+x /usr/bin/java
sudo chmod a+x /usr/bin/javac
sudo chmod a+x /usr/bin/javaws
sudo chown -R root:root /usr/lib/jvm/jdk1.7.0_55
我正在选择/更改默认 JDK
update-alternatives --config java
update-alternatives --config javac
update-alternatives --config javaws
此后如果我以默认java -version
方式运行jdk1.7.0_55
,输出将如下所示。
root@ssa-lpt:/usr/lib/jvm# java -version
java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)
但在jdk1.7.0_21
默认情况下,它会给出如下消息
java:加载共享库时出错:库文件:无法打开共享对象文件:没有此文件或目录
如果我发出:找到 libjli.so
/usr/lib/jvm/jdk1.7.0_55/jre/lib/amd64/jli/libjli.so
/usr/lib/jvm/jdk1.7.0_55/lib/amd64/jli/libjli.so
所以很明显,虽然我选择了jdk1.7.0_21
,但不知何故它仍然指向jdk1.7.0_55
尝试重命名jdk1.7.0_55
但没有成功。
不确定如何修复此问题。提前感谢您的帮助 :)
解决方案::我的jdk1.7.0_21
坏了,从 Oracle 下载了一个全新的副本,然后将其解压/usr/lib/jvm/
即可。
答案1
导致您看到此错误的原因有很多。
您能否逐个运行所有这些命令,然后在此处发布输出:
file /usr/bin/java
type /usr/bin/java
echo $JAVA_HOME
echo $PATH
ls -ahl /usr/lib/jvm
然后 -update-alternatives
选择 jdk1.7.0_55 并运行此
$ ldd $(which java)
使用update-alternatives
选择 jdk1.7.0_21 并运行它
$ ldd $(which java)
然后再次针对 jdk1.7.0_21 运行此命令
$ sudo java -version
更新。答案
对于有同样问题的每个人:
首先,运行 sudo ldconfig
。ldconfig
任何时候都可以安全运行
经过长时间的讨论,我们得出结论,jdk1.7.0_21 已损坏。
我们如何确定它:
- 当选择 java 时
jdk1.7.0_21
,sudo java -version
即使运行,也会出错根。 find /usr/lib/jvm -name "libjli.so"
,此命令必须显示libjli
位于jdk1.7.0_21
安装的文件夹中。 在我们的例子中,它不是。
在其他情况下:
检查jdk属于root:root
检查是否/usr/bin/java
为符号链接,而非可执行文件。
检查PATH
,如果您正在使用,java 不应该在 PATH 中update-alternatives
。
这里还有一些有用的链接: