So entfernen Sie OpenJDK / OpenJRE ordnungsgemäß und legen SunJDK / SunJRE als Standard fest

49

Ubuntu scheint OpenJDK / JRE gegenüber Sun JDK / JRE zu bevorzugen. Auch nachdem ich Sun JRE, JDK und das Plugin installiert und einige Zeit damit verbracht habe, OpenJDK-bezogene Pakete auszupacken, hat apt-get sie mit einigen Paketen als Abhängigkeit zurückinstalliert. Kann dieses Verhalten zugunsten von Sun Java-Paketen korrigiert werden? Ich möchte nur einen Java-Stack installiert haben (ja, es ist ein bisschen OCD , aber ich möchte, dass meine Systeme sauber sind) und möchte, dass es Sun Java ist.

Update: Wie Marcos Roriz bemerkt, scheint das Problem in default-jre (von dem Java-abhängige Pakete abhängen) zu liegen und auf OpenJDK zu verweisen. Die Frage scheint also zu lauten, wie default-jre / default-jdk zu hacken ist zu Sun Java.

Ivan
quelle
Bitte aktualisieren Sie die Antwort mit Oracle JDK ..
LoveToCode

Antworten:

35

Installieren von Sun Java auf älteren Ubuntu-Versionen (9.10 und niedriger)

Ich hatte vor ungefähr drei Jahren das gleiche Problem mit Ubuntu 8.04, denke ich. Es gab ein seltsames Problem bei der Verwendung von openjre und das Problem wurde mit der Version sun jre behoben. Hier sind die Schritte im Terminal, die für Versionen unter 10.04 gelten, da ab 10.04 sun java gelöscht und durch openjre ersetzt wurde:

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

(Alles was mit Sun Java zu tun hat. Nur um sicherzugehen)

Wenn Sie danach openjdk entfernen, haben Sie nur noch sun java. Wenn Sie es nicht entfernt haben, haben Sie beide. So wechseln Sie von einem zum anderen:

sudo update-java-alternatives -l - Dies zeigt Ihnen die Liste der Java-Engines, die Sie verwenden können.

Der Name der Java-Alternative ist der links, so dass openjdk zum Beispiel so aussehen würde:

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

Und Sie würden das System folgendermaßen auf openjdk einstellen:

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

Wenn Sie Sun verwenden möchten, tun Sie dies (nach der Installation der Sun-Pakete):

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

Wenn Sie die Java 7-Version verwenden möchten, ändern Sie einfach die oben genannte Nummer 6 für 7. Wenn ich zum Beispiel die openjre-Version 7 installieren möchte, würde ich Folgendes tun:

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

Installieren von Sun Java auf neueren Versionen von Ubuntu (10.04 und höher)

Öffnen Sie das Terminal und geben Sie Folgendes ein:

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

Damit sollte die Sun Java-Version auf Ihrem System installiert sein. Um dorthin zu wechseln, gehen Sie einfach wie folgt vor, falls Sie andere Java-Alternativen haben:

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

Wenn die Installation automatisch erfolgen soll, geben Sie Folgendes ein:

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

Danach gehen Sie einfach wie folgt vor, um die Standard-Umgebungsvariablen festzulegen:

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

Beachten Sie, dass die PPA die Versionen 6, 7 und 8 enthält. Sie können also jede dieser Versionen installieren, indem Sie einfach die Nummer in der Installationszeile ändern. Beispiel:

sudo apt-get install oracle-java8-installer

Würde Java 8 installieren. Nach der Installation der Java-Version, die Sie verwenden möchten, und dem Festlegen der Standardversion mit dem update-java-alternativesBefehl können Sie überprüfen, welche Version Sie verwenden, indem Sie Folgendes eingeben:

java -version

Es wird Ihnen die Standardversion angezeigt, die Sie gerade verwenden.

Ich möchte auch erwähnen, dass OpenJRE / JDK einen langen Weg zurückgelegt hat, seit es vor zwei oder drei Jahren viele Probleme gab, die durch den Wechsel zu Sun Java behoben wurden.

Luis Alvarado
quelle
11

Ich denke, das Problem ist, dass einige Java-Pakete auf default-jre basieren, was auf openjdk-jre verweist. Ich glaube nicht, dass es einfach ist, openjdk dauerhaft zu deinstallieren. Die Sache ist, dass Sie wahrscheinlich wieder auf openjdk stoßen werden, wenn Sie ein Java-Paket / -Programm installieren.

Wenn Sie jedoch beides möchten, ist es einfach, die Java-Laufzeitprogramme (Java, Java, JavaP usw.) auf die Sun-Implementierung einzustellen. Tu es:

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

Oder wenn Sie ein Java-Entwickler sind (installieren Sie das SDK und das SRCS):

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

Und setzen Sie es als Standardprogramme mit:

sudo update-java-alternatives -s java-6-sun
Marcos Roriz Junior
quelle
1
Ja, ich glaube, es geht um default-jre. Nein, ich möchte wirklich nicht sowohl Sun- als auch Open-JDKs haben - darum geht es hier -, um nur ein einziges Sun-JDK zu haben. Gibt es eine Möglichkeit, default-jre zu hacken, um auf Sun JRE zu verweisen?
Ivan
Ja, ich werde versuchen, das default-jrePaket so umzubauen, dass es heute Abend auf sun-java zeigt. Im Moment bin ich @ work.
Marcos Roriz Junior
6

Die .jdk1.6.0_23.jinfoDatei sollte eine Liste der mitgelieferten Programme und ihrer Pfade sein. Es gibt eine beschreibende Überschrift, gefolgt von einer Leerzeile. Dann eine Liste der Programme in einem Format mit drei Feldern: Eintragstyp (jre / jkd / plugin); Programmname; und Pfad. Sie sollten einige jinfo-Dateien haben, mit denen Sie sehen können, wie der Inhalt aussehen soll. Dies wird wahrscheinlich vom alternativen Mechanismus verwendet, um zu bestimmen, welche Verknüpfungen erstellt werden sollen. Der Kopf meines Sun-Pakets ist.

name = java-6-sun-1.6.0.22
Alias ​​= Java-6-Sonne
Priorität = 63
abschnitt = nicht frei

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

Wenn Sie die Standard-Java-Befehle überschreiben möchten, ohne den alternativen Mechanismus zu verwenden, setzen Sie Ihren Java-Pfad in Ihrem Pfad vor / usr / bin.

Bei einer manuellen Installation installiere ich Java in /opt. für deine install hätte ich in installiert /opt/jdk1.6.0_23. Dann setze ich den Pfad $JAVA_HOME/binan den Anfang meiner PATHVariablen.

BEARBEITEN: Dies ist die gesamte Sun-Datei. Hinweis .java-6-sun.jinfoist ein symbolischer Link zu .java-6-sun-1.6.0.22.jinfo.

name = java-6-sun-1.6.0.22
Alias ​​= Java-6-Sonne
Priorität = 63
abschnitt = nicht frei

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
Klicken Sie auf 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
Es handelt sich um 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
plugin xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so
plugin mozilla-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so
BillThor
quelle
Ich habe kein Java installiert, also habe ich nichts damit zu tun, nichts installiert, keine .jinfo-Dateien usw. Ich habe den Ordner usr / lib / jvm selbst erstellt, weil ich gelesen habe, dass er dort standardmäßig installiert ist, und Ich werde es so halten. Aus diesem Grund möchte ich den vollständigen Inhalt der .jinfo-Datei für das JDK von Sun sehen.
Jurchiks
Ich habe die vollständige .jinfo-Datei von sun hinzugefügt.
BillThor
6

Openjdk und icedtea löschen:

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

Fügen Sie Folgendes zu /etc/apt/sources.list hinzu

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

Installieren Sie Sun / Oracle JRE oder JDK:

apt-get install oracle-jdk7-installer
apt-get install oracle-java7-installer 
Fabian Zeindl
quelle
2
Und danach haben Sie überhaupt kein Java mehr ... Die Frage bezieht sich eigentlich darauf, wer durch den anderen zu ersetzen ist und nicht darauf, wie Sie OpenJDK von Ihrem System entfernen können. Fügen Sie Ihrer Antwort ein bisschen mehr Informationen hinzu. Die Frage kann nicht nur mithilfe der folgenden Schritte beantwortet werden.
Bruno Pereira
4

Ich habe diese Zeile zur Datei / etc / environment hinzugefügt: JAVA_HOME = "/ usr / lib / jvm / jdk1.6.0_23" und JAVA_HOME / bin zur PATH-Variablen hinzugefügt, ABER das Betriebssystem erkennt den Befehl Java immer noch nicht es ist nicht installiert und bietet mir gcj und openjdk an.

Hast du es überprüft?

echo $JAVA_HOME 
echo $PATH

Wenn Sie es nicht brauchen: Deinstallieren Sie openjdk und gcj in synaptic oder mit apt-get.

apt-get remove gcj 
apt-get remove openjdk

Ich würde Java dann von Alternativen verbannen und meistens tun, wie BillThor vorgeschlagen hatte, warum ich ihm eine Aufwertung gegeben habe.

which javac
which java

sollte zeigen, wo Sie Java installiert haben und wo es im PATH zu finden ist.

Benutzer unbekannt
quelle
Ich habe weder gcj noch openjdk installiert ... Habe nur die whichBefehle ausprobiert und es wird nichts gedruckt. Als ich herausfand, dass ich das $ -Symbol vor der Variablen JAVA_HOME in PATH vergessen hatte, starte ich jetzt neu und sehe, wie es geht.
Jurchiks
PC neu gestartet, aber der whichBefehl zeigt immer noch nichts an. Die Variablen JAVA_HOME und PATH sind korrekt: 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 Wo könnte das Problem liegen? Edit: GOTT VERDAMMT ES, warum gibt es keine Zeilenumbrüche in Kommentaren ???
Jurchiks
a) Ein Neustart des PCs sollte nicht erforderlich sein. Öffnen Sie die Shell erneut, oder melden Sie sich meistens erneut als Benutzer an. b) In der Hilfe nachsehen, wie Kommentare formatiert werden. Ich sehe, echo $PATH $JAVA_HOME/bin:/usr/local/sbin...aber im Ergebnis muss $ JAVA_HOME ausgewertet werden - es stimmt etwas nicht, oder Ihre Meldung ist fehlerhaft. c) Zeilenumbrüche: Sie sind nicht vorhanden, so dass wir ständig zu früh die EINGABETASTE drücken und dann die Uhr tickt, weil das Bearbeiten nur für einige Minuten zulässig ist - ich gehe ständig in diese Falle. Ich hasse es! :)
Benutzer unbekannt
Nun, die Variable JAVA_HOME befindet sich in derselben Datei (/ etc / environment), nur in der ersten Zeile. Vielleicht sollte es woanders sein? Es erkennt es, wenn ich echo $JAVA_HOMEaber
tippe
Meine Frage war: Does echo $PATHDruck $JAVA_HOME...oder den Wert für JAVA_HOME, dh nicht gedruckt: /usr/lib/jvm/jdk1.6.0_23?
Benutzer unbekannt
3
  1. Öffnen Sie System-> Administration-> Synaptic Package Manager und entfernen Sie OpenJDK vollständig.
  2. Testversion von Java, die java -versionin die Shell eingibt (es wird nur Sun Java angezeigt)
  3. Art sudo update-java-alternatives -l
  4. du bist fertig. Jetzt haben Sie nur Sun Java installiert und es ist als Standard-JDK eingerichtet

und es funktioniert nur, wenn sie zwei jdk installiert haben und sun-java als standardumgebung festlegen möchten

Shohrat
quelle
2

Unter Ubuntu 10.10 müssen Sie anscheinend zuerst in Synaptic libaccess-bridge-java und dann openjdk-6-jre-headless zum Entfernen markieren.

Am Ende musste eine Liste entfernt werden:

ca-certificates-java, icedtea-6-jre-cacao, libaccess-bridge-java, libaccess-bridge-java-jni, openjdk-6-jre, openjdk-6-jre-headless, openjdk-6-jre-lib.

Das hat funktioniert, aber es hat ein Verzeichnis /etc/java-6-openjdkmit verschiedenen Dateien und Unterverzeichnissen hinterlassen, das ich in einem neuen Verzeichnis isoliert habe. Es gab keine ungewöhnlichen Effekte, daher handelt es sich vermutlich nur um einen Überrest.

Dadurch blieb mir das Java, das ich direkt von der Java-Website heruntergeladen hatte. Obwohl es als Standard festgelegt und der Link zum Firefox-Plugins-Verzeichnis erstellt wurde, funktionierte es nicht mehr. Bei der Installation von sun-java6-jre und den dazugehörigen Paketen gsfonts-x11, odbcinst, odbcinst1debian2, sun-java6-bin und unixodbc über Synaptic wurde das Java-Plugin wieder aktiviert. Das Entfernen des Links im Plugins-Verzeichnis und das Ersetzen durch die aktuelle libnpjp2.so-Datei funktionierte nicht. Die Verwendung eines Links zu den Dateien libjavaplugin_oji.so in den Verzeichnissen ns7 oder ns7-gcc29 in Java, die über Synaptic installiert wurden, funktionierte ebenfalls nicht. Dies legt für mich den Schluss nahe, dass man die Anweisungen auf der Java-Website befolgen kann, um das neueste Java-Plugin in Firefox zu erhalten, und dass das integrierte Linux-Java jeder Art zum Ausführen des heruntergeladenen Java erforderlich ist. Dieses hängt dann von den Dateien ab, die es umgeben, sobald das Plugin aktiviert wurde. Während ein vollständiges Verständnis des Codes, der Java und Linux umfasst, erforderlich wäre, um seine Geheimnisse wirklich zu lösen, sind diese Experimente möglicherweise hilfreich, um die Gründe zu finden, warum in diesem Fall möglicherweise zwei Java benötigt werden. Zumindest ist es möglich, auch alles Java zu entfernen, wenn jemand dies für nützlich hält.

Steve
quelle
2

Was ich auf neuen Ubuntu 10.10-Rechnern mache, ist

  • fügen sie java-6-sonne hinzu,
  • openJDK entfernen (erst Sun Java hinzufügen, sonst werden einige Dinge wie Tomcat usw. entfernt)

Dann ist es in Ordnung für mich, keine openJDK-Abhängigkeiten mehr

Bob Yoplait
quelle
Java-6-Sun ist es nicht das Ubuntu-Standard-Paket, oder?
Fabian Zeindl,
2

Die Antworten auf diese Frage haben bei mir nicht funktioniert. Folgendes ist fehlgeschlagen:

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

Mit dem Fehler:

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

Versuchen Sie stattdessen diese Anweisungen :

  1. Öffnen Sie das Ubuntu Software Center .
  2. Suche nach IcedTea.
  3. Entfernen Sie das IcedTea Java Plug-in ( icedtea-6-jre-cacao), falls es installiert ist.
  4. Wählen Sie OpenJDK Java 7 Runtime.
  5. Klicken Sie auf Installieren.
  6. Warten Sie, bis das 41,6-MB-Paket heruntergeladen und installiert wurde.

Das OpenJDK (IcedTea) ist jetzt installiert, sodass Sie (falls Sie diesen Fehler hatten) das JDK von Oracle ohne Fehler installieren können.

Siehe auch:

Dave Jarvis
quelle
1

Zuerst: openjdk und icedtea plugin entfernen.

sudo apt-get remove openjdk* icedtea*

Zweitens: Kopieren Sie die JDK-Datei .bin nach / opt oder / usr / java und extrahieren Sie sie.

sudo cp jdk_1.16.0.bin /usr/java

Drittens: einen Link der Java-Datei nach / usr / bin / setzen

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

Aktualisieren Sie die Alternativen mit update-alternatives

Erstellen Sie im Firefox-Plugins-Verzeichnis einen symbolischen Link zum Java-Plugin.

Erstellen Sie einen symbolischen Link zur Datei Java Plugin libnpjp2.so im Firefox-Plugins-Verzeichnis:

   cd  

<Firefox>/plugins


 ln -s  

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

Hoffe das hilft.

Ubuntuser
quelle
Haben Sie nach cp und vor dem Verlinken keinen Schritt verpasst? Und: Sie schlagen eine manuelle Verknüpfung vor, aber in Java / Bin befinden sich 45 Dateien, von denen die meisten ausführbar sind. Möchten Sie 25 symbolische Links erstellen? Ich würde es vorziehen, den PFAD zu ändern.
Benutzer unbekannt
soweit ich weiß sind die schritte korrekt. Sie können sich auf das Tutorial zur Java-Installationsseite von sun (oracle's) beziehen. Die oben genannten Schritte haben jedoch bei mir funktioniert. Lass mich wissen, wie du zurechtkommst.
Ubuntuser