Як правильно видалити 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, щоб вказати до Sun Java.


будь-ласка, оновіть відповідь на oracle jdk ..
LoveToCode

Відповіді:


35

Встановлення Sun Java на старих версіях Ubuntu (версії 9.10 і нижче)

Я мав таку ж проблему один раз три роки тому з Ubuntu 8.04, я думаю. Під час використання openjre виникла дивна проблема, і її вирішили за допомогою версії sun jre. Ось кроки в терміналі, які застосовуються до версій нижче 10.04, оскільки починаючи з 10.04 сонячна ява була скинута і замінена 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, тоді у вас буде тільки сонячна Java. Якщо ви його не видалили, тоді у вас є обидва. Щоб перейти від одного до іншого, зробіть це:

sudo update-java-alternatives -l - Це покаже вам список двигунів java, якими ви можете користуватися.

Назва альтернативи java - назва ліворуч, наприклад, openjdk виглядає так:

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

І ви б встановили систему так, щоб вона відкривалась так:

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

Якщо ви хочете використовувати 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 тощо) на виконання сонця. Зроби це:

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

або якщо ви java dev (встановіть sdk та srcs):

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

І встановіть його як програми за замовчуванням за допомогою:

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

1
Так, я вважаю, що це за замовчуванням-jre. Ні, я дійсно не хочу мати як Sun, так і відкриті JDK - ось у чому полягає питання - мати одне і єдине, і нехай це буде Sun JDK. Чи є спосіб зламати default-jre, щоб вказати на Sun JRE?
Іван

Так, я спробую відновити default-jreпакет, щоб вказати на sun-java цього вечора. Зараз я працюю.
Маркос Роріз-молодший

6

У .jdk1.6.0_23.jinfoфайлі має бути список програм, що постачаються, та їх шляхи. Існує описовий заголовок, за яким слідує порожній рядок. Потім список програм у форматі трьох полів: тип запису (jre / jkd / plugin); назва програми; і шлях. У вас має бути кілька файлів jinfo, якими ви можете скористатися, щоб побачити, як повинен виглядати вміст. Це, ймовірно, використовується механізмом альтернатив, щоб визначити, які посилання створити. Голова мого пакету НД.

назва = java-6-sun-1.6.0.22
псевдонім = java-6-sun
пріоритет = 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змінної.

EDIT: Це весь файл Sun. Примітка .java-6-sun.jinfo- символічне посилання на .java-6-sun-1.6.0.22.jinfo.

назва = java-6-sun-1.6.0.22
псевдонім = java-6-sun
пріоритет = 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
jdk 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

У мене не встановлено жодного Java-файлу, тому в мене нічого не пов’язано, нічого не встановлено, жодних файлів .jinfo тощо. Я створив папку usr / lib / jvm, тому що я прочитав, що там вона встановлена ​​за замовчуванням, і Я буду тримати це таким чином. Ось чому я хотів би побачити повний вміст файлу .jinfo для JDK Sun.
jurchiks

Я додав повний файл .jinfo sun.
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 в синаптичному або за допомогою apt-get.

apt-get remove gcj 
apt-get remove openjdk

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

which javac
which java

Потрібно вказувати на те, де ви встановили java, і де воно знаходиться в PATH.


У мене не встановлено gcj або openjdk ... Просто спробував whichкоманди, і він нічого не друкує. З'ясував, що я забув символ $ перед змінною JAVA_HOME в PATH, я зараз перезавантажуюсь і побачу, як це відбувається.
jurchiks

Перезапустили ПК, але 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 Де могла бути проблема? Редагувати: БОГ ДАМНУЙ ІТ, чому в коментарях немає розривів рядків ??
jurchiks

а) перезавантаження ПК не потрібно. Повторного відкриття оболонки повинно вистачити або здебільшого переробити як користувач. b) Загляньте всередину довідки щодо форматування в коментарях. Я бачу, echo $PATH $JAVA_HOME/bin:/usr/local/sbin...але в результаті $ JAVA_HOME необхідно оцінити - щось не так, або ваша звітність помилкова. c) Linearreaks: їх там немає, тому ми постійно надто рано натискаємо 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. ви закінчили. Тепер у вас встановлено лише програмне забезпечення Java java, і це налаштування як jdk за замовчуванням

і він працює лише у тому випадку, якщо у вас встановлено два jdk і ви хочете встановити sun-java як середовище за замовчуванням


2

Використовуючи Ubuntu 10.10, здається, потрібно позначити для видалення libaccess-bridge-java спочатку в Synaptic, а потім позначити openjdk-6-jre-headless.

Я закінчив список, який потрібно видалити:

ca-сертифікати-java, icedtea-6-jre-cacao, 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-sun,
  • видаліть openJDK (спочатку додайте Sun Java, інакше купу речей буде видалено, як tomcat тощо)

Тоді це добре для мене, більше немає відкритих залежностей від JDK


java-6-sun, це не пакет ubuntu-default, чи це?
Фабіан Зейндл

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 .
  2. Шукати IcedTea.
  3. Видаліть плагін IcedTea Java ( icedtea-6-jre-cacao), якщо він встановлений.
  4. Виберіть OpenJDK Java 7 Runtime.
  5. Клацніть Встановити.
  6. Дочекайтеся завантаження та встановлення пакета 41,6 Мб.

Зараз встановлений OpenJDK (IcedTea), який повинен дозволити вам (якщо у вас виникла ця помилка) продовжувати установку JDK Oracle без помилок.

Дивитися також:


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

оновити альтернативи, використовуючи альтернативи оновлення

Створіть символічне посилання на плагін Java в каталозі плагінів Firefox.

Створіть символічне посилання на файл libnpjp2.so плагін Java у каталозі плагінів Firefox:

   cd  

<Firefox>/plugins


 ln -s  

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

Сподіваюся, це допомагає.


Ви не пропустили крок після cp та перед посиланням? І: Ви пропонуєте посилання вручну, але у файлі java / bin є 45 файлів, більшість з яких виконується. Хочете зробити 25 символічних посилань? Я вважаю за краще змінити ПАТ.
користувач невідомий

наскільки я знаю, кроки правильні. ви можете звернутися до підручника на сторінці встановлення Java (sun (oracle)). вищезазначені кроки працювали для мене! дайте мені знати, як ви ладите.
Ubuntuser
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.