多个JDK在Ubuntu 14.04中无法正常工作

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 -versionjdk1.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 :无法打开共享对象文件:没有这样的文件或目录

如果我发出: 找到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被破坏下载了一个新的副本formsoracle解压缩它在/usr/lib/jvm/就是这样。

您可以看到此错误的原因太多了。

你可以一个一个地运行所有这些命令,并在这里发布输出:

  1. file /usr/bin/java
  2. type /usr/bin/java
  3. echo $JAVA_HOME
  4. echo $PATH
  5. 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 

UPDATE。 回答

对于遇到同样问题的每个人:

首先,运行sudo ldconfig随时运行ldconfig是安全的

经过长时间的讨论,我们得出结论,jdk1.7.0_21已损坏。

我们如何确定它:

  1. 当选择java jdk1.7.0_21 ,即使以root身份运行, sudo java -version也会出错。
  2. find /usr/lib/jvm -name "libjli.so" ,此命令必须显示libjli位于安装了jdk1.7.0_21文件夹中。 在我们的例子中,它不是。

在其他情况下:

检查jdk是否属于root:root

检查/usr/bin/java是否是符号链接,而不是可执行文件。

检查PATH ,java不应该在PATH中,如果您正在使用update-alternatives

这里也是有用的链接:

https://unix.stackexchange.com/questions/16656/problem-to-launch-java-at-debian-error-while-loading-shared-libraries-libjli

https://www.centos.org/forums/viewtopic.php?t=16398

https://superuser.com/questions/310371/problem-launch-java-on-debian-error-while-loading-shared-libraries-libjli-so