версии 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 : невозможно открыть файл общих объектов : Нет такого файла или каталога
Если я выдаю: , найдите 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 untar его в /usr/lib/jvm/
, которая была им.
Существует, слишком много обосновывает, почему Вы видите эту ошибку.
Могли Вы работать, все это управляет один за другим, и вывод сообщения здесь:
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 повреждается.
Как мы определяем его:
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 не должен быть в ПУТИ, если Вы используете update-alternatives
.
Также вот полезные ссылки: