Как правильно удалить OpenJDK / OpenJRE и установить SunJDK / SunJRE по умолчанию

49

Ubuntu, похоже, больше поддерживает OpenJDK / JRE, чем Sun JDK / JRE. Даже после того, как я установил Sun JRE, JDK и плагин и потратил некоторое время на извлечение пакетов, связанных с OpenJDK, apt-get установил их обратно с некоторыми пакетами в качестве зависимости. Можно ли исправить это поведение в пользу пакетов Sun Java? Мне бы хотелось, чтобы был установлен один-единственный стек Java (да, это немного OCD , но я бы хотел, чтобы мои системы были чистыми), и хочу, чтобы это была Sun Java.

Обновление: как отмечает Маркос Рориз, проблема, по-видимому, в default-jre (от которого зависят зависимые от Java пакеты), указывающем на OpenJDK, поэтому возникает вопрос о том, как взломать default-jre / default-jdk, чтобы указать Солнцу Яве.

Иван
источник
пожалуйста, обновите ответ с помощью oracle jdk ..
LoveToCode

Ответы:

35

Установка Sun Java на более ранние версии Ubuntu (9.10 и ниже)

У меня была такая же проблема около трех лет назад с Ubuntu 8.04, я думаю. При использовании openjre возникла странная проблема, и проблема была решена с помощью версии sun jre. Вот шаги в терминале, которые применяются к версиям ниже 10.04, так как начиная с 10.04 sun java была удалена и заменена openjre:

sudo apt-get remove openjdk-6-jre default-jre default-jre-headless

sudo apt-get install sun-java6-jre sun-java6-bin sun-java6-plugin sun-java6-fonts

(Все, что связано с Sun Java. Просто чтобы убедиться)

После этого, если вы удалите openjdk, у вас будет только Sun Java. Если вы не удалили его, то у вас есть оба. Чтобы перейти от одного к другому, сделайте это:

sudo update-java-alternatives -l - Это покажет вам список Java-движков, которые вы можете использовать.

Имя альтернативы java указано слева, поэтому, например, openjdk будет выглядеть так:

java-6-openjdk 1061 /usr/lib/jvm/java-6-openjdk

И вы должны установить систему для openjdk следующим образом:

sudo update-java-alternatives -s java-6-openjdk

Если вы хотите использовать Sun, вы должны сделать это (после установки пакетов Sun):

sudo update-java-alternatives -s java-6-sun

Если вы хотите использовать версию Java 7, просто измените номер 6, упомянутый выше, на 7. Например, если я хочу установить версию 7 openjre, я бы:

sudo apt-get install openjdk-7-jre default-jre default-jre-headless

Установка Sun Java на более новые версии Ubuntu (10.04 и выше)

Откройте терминал и введите следующее:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update   
sudo apt-get upgrade   
sudo apt-get install oracle-java7-installer

Это должно установить версию Sun Java в вашей системе. Чтобы перейти на него, просто сделайте следующее, если у вас есть другие альтернативы Java:

sudo update-java-alternatives -s java-7-oracle  

Если вы хотите, чтобы установка происходила автоматически, введите следующее:

sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections

после этого просто сделайте следующее, чтобы установить переменные среды по умолчанию:

sudo apt-get install oracle-java7-set-default

Обратите внимание, что PPA включает в себя версии 6, 7 и 8. Таким образом, вы можете установить любую из них, просто изменив номер в строке установки, например:

sudo apt-get install oracle-java8-installer

Установит Java 8. После установки версии Java, которую вы хотите использовать, и установкой версии по умолчанию с помощью update-java-alternativesкоманды, вы можете проверить, какую версию вы используете, набрав следующее:

java -version

Он покажет вам версию по умолчанию, которую вы используете в данный момент.

Я также хотел бы отметить, что OpenJRE / JDK прошел долгий путь 2 или 3 года назад, когда у него было много проблем, которые были решены путем перехода на Sun Java.

Луис Альварадо
источник
11

Я думаю, проблема в том, что некоторые Java-пакеты используют default-jre, который указывает на openjdk-jre. Я не думаю, что есть простой способ окончательно удалить openjdk. Дело в том, что вы, вероятно, снова столкнетесь с openjdk при установке java-пакета / программы.

Но если вы хотите иметь и то, и другое, легко ли настроить программы времени выполнения java (java, javah, javap и т. Д.) На реализацию sun. Сделай это:

sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts

или если вы являетесь Java-разработчиком (установите SDK и SRC):

sudo apt-get install sun-java6-jdk sun-java6-jre sun-java6-source

И установите его в качестве программ по умолчанию с помощью:

sudo update-java-alternatives -s java-6-sun
Маркос Рорис Младший
источник
1
Да, я считаю, что это по умолчанию-JRE. Нет, я действительно не хочу иметь Sun и Open JDK - вот в чем вопрос - иметь один-единственный и пусть это будет Sun JDK. Есть ли способ взломать default-jre, чтобы указать на Sun JRE?
Иван
Да, я постараюсь пересобрать default-jreпакет так, чтобы он указывал на солнечную яву этим вечером. Прямо сейчас я @ работа.
Маркос Рорис Младший
6

.jdk1.6.0_23.jinfoФайл должен быть список поставляемых программ и их пути. Существует описательный заголовок, за которым следует пустая строка. Затем список программ в формате трех полей: тип записи (jre / jkd / plugin); название программы; и путь. У вас должно быть несколько jinfo-файлов, которые вы можете использовать, чтобы увидеть, как должно выглядеть содержимое. Вероятно, это используется механизмом альтернатив, чтобы определить, какие ссылки создавать. Глава моего пакета Sun.

имя = ява-6-ВС-1.6.0.22
псевдоним = Java-6-вс
Приоритет = 63
Секция = несвободные

jre ControlPanel / usr / lib / jvm / java-6-sun / jre / bin / ControlPanel
jre java / usr / lib / jvm / java-6-sun / jre / bin / java
jre java_vm / usr / lib / jvm / java-6-sun / jre / bin / java_vm

Если вы хотите переопределить команды Java по умолчанию без использования механизма альтернатив, поместите ваш путь Java перед / usr / bin в вашем пути.

При ручной установке я устанавливаю Java в /opt. для вашей установки я бы установил в /opt/jdk1.6.0_23. Затем я помещаю путь $JAVA_HOME/binв начало моей PATHпеременной.

РЕДАКТИРОВАТЬ: Это весь файл Sun. Примечание .java-6-sun.jinfoявляется символической ссылкой на .java-6-sun-1.6.0.22.jinfo.

имя = ява-6-ВС-1.6.0.22
псевдоним = Java-6-вс
Приоритет = 63
Секция = несвободные

jre ControlPanel / usr / lib / jvm / java-6-sun / jre / bin / ControlPanel
jre java / usr / lib / jvm / java-6-sun / jre / bin / java
jre java_vm / usr / lib / jvm / java-6-sun / jre / bin / java_vm
jre javaws / usr / lib / jvm / java-6-sun / jre / bin / javaws
jre jcontrol / usr / lib / jvm / java-6-sun / jre / bin / jcontrol
jre keytool / usr / lib / jvm / java-6-sun / jre / bin / keytool
jre pack200 / usr / lib / jvm / java-6-sun / jre / bin / pack200
jre policytool / usr / lib / jvm / java-6-sun / jre / bin / policytool
jre rmid / usr / lib / jvm / java-6-sun / jre / bin / rmid
jre rmiregistry / usr / lib / jvm / java-6-sun / jre / bin / rmiregistry
jre unpack200 / usr / lib / jvm / java-6-sun / jre / bin / unpack200
jre orbd / usr / lib / jvm / java-6-sun / jre / bin / orbd
jre servertool / usr / lib / jvm / java-6-sun / jre / bin / servertool
jre tnameserv / usr / lib / jvm / java-6-sun / jre / bin / tnameserv
jre jexec / usr / lib / jvm / java-6-sun / jre / lib / jexec
jdk HtmlConverter / usr / lib / jvm / java-6-sun / bin / HtmlConverter
jdk appletviewer / usr / lib / jvm / java-6-sun / bin / appletviewer
jdk apt / usr / lib / jvm / java-6-sun / bin / apt
jdk extcheck / usr / lib / jvm / java-6-sun / bin / extcheck
jdk idlj / usr / lib / jvm / java-6-sun / bin / idlj
jdk jar / usr / lib / jvm / java-6-sun / bin / jar
jsk jarsigner / usr / lib / jvm / java-6-sun / bin / jarsigner
jdk javac / usr / lib / jvm / java-6-sun / bin / javac
jdk javadoc / usr / lib / jvm / java-6-sun / bin / javadoc
jdk javah / usr / lib / jvm / java-6-sun / bin / javah
jdk javap / usr / lib / jvm / java-6-sun / bin / javap
jdk jconsole / usr / lib / jvm / java-6-sun / bin / jconsole
jdk jdb / usr / lib / jvm / java-6-sun / bin / jdb
jdk jhat / usr / lib / jvm / java-6-sun / bin / jhat
jdk jinfo / usr / lib / jvm / java-6-sun / bin / jinfo
jdk jmap / usr / lib / jvm / java-6-sun / bin / jmap
jdk jps / usr / lib / jvm / java-6-sun / bin / jps
jdk jrunscript / usr / lib / jvm / java-6-sun / bin / jrunscript
jdk jsadebugd / usr / lib / jvm / java-6-sun / bin / jsadebugd
jdk jstack / usr / lib / jvm / java-6-sun / bin / jstack
jdk jstat / usr / lib / jvm / java-6-sun / bin / jstat
jdk jstatd / usr / lib / jvm / java-6-sun / bin / jstatd
jdk native2ascii / usr / lib / jvm / java-6-sun / bin / native2ascii
jdk rmic / usr / lib / jvm / java-6-sun / bin / rmic
jdk schemagen / usr / lib / jvm / java-6-sun / bin / schemagen
jdk serialver / usr / lib / jvm / java-6-sun / bin / serialver
jdk wsgen / usr / lib / jvm / java-6-sun / bin / wsgen
jdk wsimport / usr / lib / jvm / java-6-sun / bin / wsimport
jdk xjc / usr / lib / jvm / java-6-sun / bin / xjc
плагин xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so
плагин mozilla-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so
BillThor
источник
У меня нет установленной java, поэтому у меня нет ничего связанной с ней, ничего не установлено, нет файлов .jinfo и т. Д. Я сам создал папку usr / lib / jvm, потому что я прочитал, что именно там она установлена ​​по умолчанию, и Я собираюсь оставить это так. Вот почему я хотел бы увидеть полное содержимое файла .jinfo для Sun JDK.
Юрчик
Я добавил полный файл Sun.jinfo.
BillThor
6

Удалить openjdk и icedtea:

apt-get purge openjdk-\* icedtea-\* icedtea6-\*

добавьте следующее в /etc/apt/sources.list

deb http://ppa.launchpad.net/webupd8team/java/ubuntu YOUR_UBUNTU_VERSION_HERE main

установить Sun / Oracle JRE или JDK:

apt-get install oracle-jdk7-installer
apt-get install oracle-java7-installer 
Фабиан Цейндль
источник
2
И после этого у вас вообще не остается Java ... Вопрос на самом деле касается того, кто заменяет одно другим, а не как удалить OpenJDK из вашей системы. Добавьте немного больше информации к вашему ответу, на вопрос нельзя ответить, только выполнив следующие действия.
Бруно Перейра
4

Я добавил эту строку в файл / etc / environment: JAVA_HOME = "/ usr / lib / jvm / jdk1.6.0_23" и добавил JAVA_HOME / bin в переменную PATH, НО операционная система по-прежнему не распознает команду java, говорит он не установлен и предлагает мне gcj и openjdk.

Вы это проверяли?

echo $JAVA_HOME 
echo $PATH

Если вам это не нужно: удалите openjdk и gcj в synaptic или с помощью apt-get.

apt-get remove gcj 
apt-get remove openjdk

Тогда я запретил бы java альтернативам, и сделал бы в основном так, как предложил БиллТор, почему я дал ему голос.

which javac
which java

должен указать, где вы установили Java, и где он находится в PATH.

неизвестный пользователь
источник
У меня не установлены gcj или openjdk ... Только что попробовал whichкоманды и ничего не печатает. Обнаружил, что я забыл символ $ перед переменной JAVA_HOME в PATH, сейчас перезапущу и посмотрю, как это происходит.
Юрчик
Перезагрузил компьютер, но whichкоманда все равно ничего не показывает. И переменные JAVA_HOME и PATH являются правильными: echo $ JAVA_HOME /usr/lib/jvm/jdk1.6.0_23 echo $ PATH $ JAVA_HOME / bin: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games В чем может быть проблема? Редактировать: Черт возьми, почему в комментариях нет разрывов строк?
Юрчик
а) перезагрузка ПК не требуется. Вновь открыть оболочку должно быть достаточно, или, в основном, повторно войти в систему как пользователь. б) Загляните внутрь справки по форматированию в комментариях. Я вижу, echo $PATH $JAVA_HOME/bin:/usr/local/sbin...но в результате $ JAVA_HOME должен быть оценен - ​​что-то не так, или ваши сообщения ошибочны. c) Разрывы строк: их там нет, поэтому мы постоянно нажимаем ENTER слишком рано, а затем тикают часы, потому что редактирование разрешено всего на несколько минут - я постоянно захожу в эту ловушку. Я ненавижу это! :)
пользователь неизвестен
Ну, переменная JAVA_HOME находится в том же файле (/ etc / environment), только в первой строке. Может быть, это должно быть где-то еще? Он распознает это, когда я echo $JAVA_HOME
печатаю,
Мой вопрос: Имеет ли echo $PATHпечать $JAVA_HOME...или он напечатает значение для JAVA_HOME, а именно: /usr/lib/jvm/jdk1.6.0_23?
пользователь неизвестен
3
  1. Откройте System-> Administration-> Synaptic Package Manager и затем полностью удалите OpenJDK.
  2. Тестовая версия Java, набирающая текст java -versionв оболочке (будет отображаться только Sun Java)
  3. Тип sudo update-java-alternatives -l
  4. вы сделали. Теперь у вас установлена ​​только Sun Java, и она установлена ​​по умолчанию как JDK

и это работает, только если у вас установлено два jdk и вы хотите установить sun-java в качестве среды по умолчанию

Шохрат
источник
2

При использовании Ubuntu 10.10, вам нужно сначала пометить удаление libaccess-bridge-java в Synaptic, а затем пометить openjdk-6-jre-headless.

Я закончил со списком, который нужно удалить:

CA-Certificates-Java, icedtea-6-JRE-какао, libaccess-bridge-java, libaccess-bridge-java-jni, openjdk-6-jre, openjdk-6-jre-headless, openjdk-6-jre-lib.

Это сработало, но оставило каталог /etc/java-6-openjdkс различными файлами и подкаталогами внутри, который я выделил в новом каталоге. Там не было никаких необычных эффектов, так что, вероятно, это просто остатки.

Это оставило меня с Java, которую я скачал прямо с сайта Java. Однако, несмотря на то, что он задан по умолчанию и создана ссылка на каталог плагинов Firefox, он больше не работает. После установки sun-java6-jre и связанных с ним пакетов gsfonts-x11, odbcinst, odbcinst1debian2, sun-java6-bin и unixodbc через Synaptic Java-плагин начал работать снова. Удаление ссылки в каталоге плагинов и замена ее настоящим файлом libnpjp2.so не работали. Использование ссылки на файлы libjavaplugin_oji.so в каталогах ns7 или ns7-gcc29 в Java, установленных через Synaptic, также не работало. Это наводит меня на мысль о том, что, чтобы получить последний плагин Java в Firefox, можно следовать инструкциям на веб-сайте Java, и что для запуска загруженной Java необходима интегрированная Linux Java любой разновидности. который затем использует свою работу над файлами, окружающими его, после активации плагина. В то время как полное понимание кода, включающего в себя Java и Linux, потребовало бы по-настоящему разгадать его загадки, возможно, эти эксперименты помогут найти причины, по которым в этом случае могут понадобиться две Java. По крайней мере, можно также удалить всю Java, если кому-то это будет полезно.

Стив
источник
2

То, что я делаю на новых машинах Ubuntu 10.10, это

  • добавить java-6-солнце,
  • удалить openJDK (сначала добавьте sun Java, в противном случае куча вещей будет удалена, например, tomcat и т. д.)

Тогда это нормально для меня, нет больше OpenJDK зависимостей

Боб Йоплайт
источник
java-6-sun - это не пакет ubuntu-default-package или нет?
Фабиан Цейндль
2

Ответы на этот вопрос не сработали для меня. То есть следующее не удалось:

sudo apt-get purge sun-java5-jre sun-java6-font sun-java6-jre

С ошибкой:

Virtual packages like 'sun-java6-jre' can't be removed

Попробуйте вместо этого эти инструкции :

  1. Откройте Ubuntu Software Center .
  2. Поиск IcedTea.
  3. Удалите IcedTea Java Plug-in ( icedtea-6-jre-cacao), если он установлен.
  4. Выберите OpenJDK Java 7 Runtime.
  5. Нажмите Установить.
  6. Дождитесь загрузки и установки пакета 41,6 МБ.

OpenJDK (IcedTea) теперь установлен, что должно позволить вам (если у вас была эта ошибка) продолжить установку Oracle JDK без ошибок.

Смотрите также:

Дейв Джарвис
источник
1

Во-первых: удалите openjdk и плагин icedtea.

sudo apt-get remove openjdk* icedtea*

Второе: скопируйте файл .bin jdk в / opt или / usr / java и распакуйте его.

sudo cp jdk_1.16.0.bin /usr/java

Третье: поместите ссылку на файл Java в / usr / bin /

ln -s /usr/java/jdk_1.6.0/bin/java /usr/bin/java
ln -s /usr/java/jdk_1.6.0/bin/javac /usr/bin/javac

обновить альтернативы, используя update-альтернативы

Создайте символическую ссылку на плагин Java в каталоге плагинов Firefox.

Создайте символическую ссылку на файл libnpjp2.so подключаемого модуля Java в каталоге подключаемых модулей Firefox:

   cd  

<Firefox>/plugins


 ln -s  

<JRE>/lib/i386/libnpjp2.so .

Надеюсь это поможет.

Ubuntuser
источник
Разве вы не пропустили ни шагу после cp, и до связывания? И: Вы предлагаете ручное связывание, но в java / bin 45 файлов, большинство из которых исполняемые. Хотите сделать 25 символических ссылок? Я бы предпочел изменить ПУТЬ.
пользователь неизвестен
насколько я знаю, шаги правильные. Вы можете обратиться к руководству на странице установки Java (Oracle). вышеупомянутые шаги работали для меня все же! дайте мне знать, как вы ладите.
Ubuntuser