Я не совсем уверен, как я попал в эту беду, но по некоторым причинам я не могу изменить текущую версию Java с помощью альтернатив. Я могу работать, альтернативы - конфигурируют Java и вводят мой выбор, но когда я повторяю номер версии или для Java или для javac, он плюет, отступают 1.5 каждых раза, когда (несмотря на альтернативы, показывающие, что текущая версия 1.6). Сервер, с которым я работаю, выполняет RHEL5, между прочим.
Я проверил, что пути, используемые в альтернативах, указывают на корректные каталоги. Вот некоторый вывод от моей сессии:
[brilewis@myserver] $ sudo/usr/sbin/update-alternatives - конфигурирует Java
Существует 3 программы, которые обеспечивают 'Java'.
Команда выбора
** 1/usr/lib/jvm/jre-1.4.2-gcj/bin/java
+ 2/usr/java/jdk1.5.0_10/bin/java
3/usr/java/jdk1.6.0_16/bin/javaВойдите для хранения текущего выбора [+], или число выбора типа: 3
[brilewis@myserver] $ Java - версия
Java(TM) 2 Runtime Environment версии "1.5.0_10" Java, Standard Edition (создают 1.5.0_10-b03), HotSpot(TM) Server VM Java (создают 1.5.0_10-b03, смешанный режим),
[brilewis@myserver] $ sudo/usr/sbin/update-alternatives - конфигурирует Java
Существует 3 программы, которые обеспечивают 'Java'.
Команда выбора
** 1/usr/lib/jvm/jre-1.4.2-gcj/bin/java
2/usr/java/jdk1.5.0_10/bin/java
+ 3/usr/java/jdk1.6.0_16/bin/javaВойдите для хранения текущего выбора [+], или число выбора типа:
ОБНОВЛЕНИЕ: следующее является выводом echo $PATH
:
/usr/java/jdk1.5.0_10/bin:/usr/local/apache-ant-1.7.1/bin:/usr/local/apache-tomcat-6.0.24:/usr/kerberos/bin:/usr/local/bin:/bi n:/usr/bin:/usr/NX/bin:/home/brilewis/bin
ОБНОВЛЕНИЕ (4/26/10): Я следовал за предложением Bert и удалил JAVA_HOME из var среды ПУТИ в/etc/profile. После выполнения этого я смог использовать альтернативы для изменения версии Java. Единственная проблема - это, когда я пытаюсь работать javac
, Я добираюсь "-удар: javac: команда, не найденная". Этого не происходит, когда версия установлена на 1,5.
Единственный способ решить проблему - это начать все сначала, удалив / var / lib / alternatives / java и снова установив каждый JDK. Я сделал то же самое для javac и jar. После этого я смог без проблем переключаться между версиями.
альтернативы
работают путем изменения символической ссылки в каталоге / usr / bin
. Однако, если ваш путь содержит действующий исполняемый файл ранее в пути, он будет использоваться вместо него.
В этом случае, судя по вашим предыдущим комментариям, похоже, что /usr/java/jdk1.5.0_10/bin
находится где-то на пути и его следует удалить.
Для оболочки BASH путь обычно задается в ~ / .bashrc
или (что менее вероятно?) ~ / .bash_profile
Обновлено с дополнительными пояснениями
Проверьте, какой исполняемый файл java
действительно запущен, например
$ type java
Если здесь отображается что-то иное, кроме / usr / bin / java
, то у вас, вероятно, есть конкретная JRE / JDK, жестко запрограммированная на вашем пути. Это нормально, но вы не сможете использовать изменения версии Java с использованием альтернатив RH для любой учетной записи, которая жестко закодирует конкретный JRE / JDK в своем PATH
таким образом. Однако другие пакеты / учетные записи (например, системные процессы), которые не указывают жестко конкретную версию JDK в свой путь, будут использовать альтернативу
-специализированную JRE.
Проверьте переменную среды JAVA_HOME
, например
$ echo $ JAVA_HOME
Если это установлено, это иногда будет указывать исполняемый файл java на другой JRE / JDK, независимо от того, где находится сам исполняемый файл java
. Опять же, нет ничего необычного в том, чтобы установить это, но вы не сможете использовать изменения версии Java с использованием альтернатив RH для любой учетной записи, которая жестко кодирует другой JAVA_HOME.
С учетом всего сказанного, для разработки в моей учетной записи я обычно устанавливаю определенный JDK в своем пути и устанавливаю JAVA_HOME так, чтобы он указывал на конкретный JDK, а не полагался на системные настройки. Альтернативы RH позволяют контролировать, какую версию Java используют другие пакеты, но для моей собственной разработки я предпочитаю явно указывать на Java, которую я хочу использовать.