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

Suv*_*ker 5 java jdk 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我正在选择/更改默认 JDK

update-alternatives --config java
update-alternatives --config javac
update-alternatives --config javaws
Run Code Online (Sandbox Code Playgroud)

在此之后,如果我运行java -versionwhilejdk1.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)
Run Code Online (Sandbox Code Playgroud)

但虽然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
Run Code Online (Sandbox Code Playgroud)

所以很明显,虽然我选择了jdk1.7.0_21但不知何故它仍然指向jdk1.7.0_55

试图重命名,jdk1.7.0_55但没有运气。

不知道如何解决这个问题。在此先感谢您的帮助 :)

解决方案:jdk1.7.0_21被破坏了,下载了一个全新的 oracle 副本,解压它/usr/lib/jvm/就是这样。

c0r*_*0rp 3

您看到此错误的原因有太多。

您能否一一运行所有这些命令,并在此处发布输出:

  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)
Run Code Online (Sandbox Code Playgroud)

使用update-alternatives选择 jdk1.7.0_21 并运行它

$ ldd $(which java)
Run Code Online (Sandbox Code Playgroud)

然后再次对于 jdk1.7.0_21 运行此命令

$ sudo java -version
Run Code Online (Sandbox Code Playgroud)

更新。回答

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

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

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

我们如何确定它:

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

在其他情况下:

检查jdk属于root:root

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

检查一下PATH,如果您使用的是 .java,那么 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