Jak poprawnie usunąć OpenJDK / OpenJRE i ustawić SunJDK / SunJRE jako Domyślny

49

Ubuntu wydaje się faworyzować OpenJDK / JRE w stosunku do Sun JDK / JRE. Nawet po tym, jak zainstalowałem Sun JRE, JDK i wtyczkę i spędziłem trochę czasu na wydobywaniu pakietów związanych z OpenJDK, apt-get zainstalował je z powrotem z niektórymi pakietami jako zależność. Czy to zachowanie można poprawić na korzyść pakietów Sun Java? Chciałbym mieć zainstalowany jeden i jedyny stos Java (tak, to trochę OCD , ale lubię mieć czyste systemy) i chcę, aby był to Sun Java.

Aktualizacja: jak zauważa Marcos Roriz, wydaje się, że problemem jest default-jre (od którego zależą pakiety zależne od Javy) wskazujący na OpenJDK, więc wydaje się, że chodzi o to, jak zhakować default-jre / default-jdk, aby wskazać do Sun Java.

Ivan
źródło
proszę, zaktualizuj odpowiedź przy pomocy Oracle
JDK

Odpowiedzi:

35

Instalowanie Sun Java na starszych wersjach Ubuntu (9.10 i niższych)

Miałem ten sam problem raz około trzy lata temu z Ubuntu 8.04. Wystąpił dziwny problem podczas korzystania z OpenJre i problem został rozwiązany przy użyciu wersji Sun Jre. Oto kroki w terminalu, które dotyczą wersji poniżej 10.04, ponieważ od 10.04 Sun Java została usunięta i zastąpiona przez 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

(Wszystko związane z Javą Sun. Tylko dla pewności)

Następnie, jeśli usuniesz openjdk, będziesz miał tylko Sun Java. Jeśli go nie usunąłeś, masz oba z nich. Aby przejść z jednego do drugiego, wykonaj następujące czynności:

sudo update-java-alternatives -l - Spowoduje to wyświetlenie listy silników Java, których możesz używać.

Nazwa alternatywy java to ta po lewej, więc na przykład openjdk wyglądałby tak:

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

I ustawiłbyś system na openjdk w następujący sposób:

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

Jeśli chcesz korzystać z Sun, zrobiłbyś to (po instalacji pakietów Sun):

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

Jeśli chcesz korzystać z wersji java 7, po prostu zmień numer 6 wymieniony powyżej na 7. Na przykład, jeśli chcę zainstalować wersję 7 openjre, zrobiłbym:

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

Instalowanie Sun Java na nowszych wersjach Ubuntu (10.04 i wyżej)

Otwórz terminal i wpisz następujące polecenie:

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

To powinno zainstalować wersję Sun Java w twoim systemie. Aby to zmienić, po prostu wykonaj następujące czynności, jeśli masz inne alternatywy Java:

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

Jeśli chcesz, aby instalacja była automatyczna, wpisz następujące polecenie:

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

następnie wykonaj następujące czynności, aby ustawić domyślne zmienne środowiskowe:

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

Pamiętaj, że PPA obejmuje wersje 6, 7 i 8. Możesz więc zainstalować dowolną z nich, po prostu zmieniając numer w wierszu instalacji, na przykład:

sudo apt-get install oracle-java8-installer

Zainstalowałbym Javę 8. Po zainstalowaniu wersji Java, której chcesz używać i ustawieniu domyślnej wersji za pomocą update-java-alternativespolecenia, możesz sprawdzić, której wersji używasz, wpisując następujące polecenie:

java -version

Pokaże Ci domyślną wersję, której używasz w tym momencie.

Chciałbym również wspomnieć, że OpenJRE / JDK przeszedł długą drogę od 2 lub 3 lat temu, kiedy miał wiele problemów, które zostały rozwiązane przez przejście na Sun Java.

Luis Alvarado
źródło
11

Myślę, że problem polega na tym, że niektóre pakiety Java polegają na default-jre, co wskazuje na openjdk-jre. Nie sądzę, że istnieje prosty sposób na trwałe odinstalowanie openjdk. Chodzi o to, że prawdopodobnie po raz kolejny wpadniesz na openjdk podczas instalowania pakietu / programu Java.

Ale jeśli chcesz mieć jedno i drugie, czy łatwo jest ustawić programy wykonawcze Java (java, javah, javap itd.) Na implementację sun. Zrób to:

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

lub jeśli jesteś programistą Java (zainstaluj sdk i srcs):

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

I ustaw go jako programy domyślne za pomocą:

sudo update-java-alternatives -s java-6-sun
Marcos Roriz Junior
źródło
1
Tak, wierzę, że chodzi o default-jre. Nie, naprawdę nie chcę mieć zarówno Sun, jak i Open JDK - oto o co chodzi - aby mieć jeden i jedyny i niech to będzie Sun JDK. Czy istnieje sposób włamania się do default-jre, aby wskazać Sun JRE?
Ivan
Tak, default-jretego wieczoru spróbuję odbudować pakiet, aby wskazał Sun-Java. Teraz jestem @ work.
Marcos Roriz Junior
6

.jdk1.6.0_23.jinfoPlik powinien być wykaz dostarczonych programów i ich ścieżkach. Jest opisowy nagłówek, po którym następuje pusty wiersz. Następnie lista programów w formacie trzech pól: typ wpisu (jre / jkd / plugin); Nazwa programu; i ścieżka. Powinieneś mieć jakieś pliki jinfo, których możesz użyć, aby zobaczyć, jak powinna wyglądać zawartość. Jest to prawdopodobnie wykorzystywane przez mechanizm alternatywny w celu ustalenia, które łącza należy utworzyć. Szefem mojego pakietu Sun jest.

name = java-6-sun-1.6.0.22
alias = java-6-sun
priorytet = 63
sekcja = niewolna

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

Jeśli chcesz zastąpić domyślne polecenia Java bez użycia mechanizmu alternatywnego, umieść swoją ścieżkę Java przed / usr / bin na swojej ścieżce.

Podczas ręcznej instalacji instaluję Javę w /opt. dla twojej instalacji zainstalowałbym w /opt/jdk1.6.0_23. Następnie umieszczam ścieżkę $JAVA_HOME/binna początku mojej PATHzmiennej.

EDYCJA: To jest cały plik Sun. Uwaga .java-6-sun.jinfoto symboliczny link do .java-6-sun-1.6.0.22.jinfo.

name = java-6-sun-1.6.0.22
alias = java-6-sun
priorytet = 63
sekcja = niewolna

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 schemat / usr / lib / jvm / java-6-sun / bin / schematagen
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
wtyczka mozilla-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so
BillThor
źródło
Nie mam zainstalowanej żadnej Java, więc nie mam z nią nic związanego, nic zainstalowanego, żadnych plików .jinfo itp. Sam utworzyłem folder usr / lib / jvm, ponieważ czytam, że tam jest domyślnie zainstalowany, i Tak to zrobię. Dlatego chciałbym zobaczyć pełną zawartość pliku .jinfo dla JDK firmy Sun.
jurchiks
Dodałem pełny plik .jinfo słońca.
BillThor
6

Usuń openjdk i icedtea:

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

dodaj następujące elementy do /etc/apt/sources.list

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

zainstaluj Sun / Oracle JRE lub JDK:

apt-get install oracle-jdk7-installer
apt-get install oracle-java7-installer 
Fabian Zeindl
źródło
2
A po tym w ogóle nie masz Javy ... Pytanie w rzeczywistości dotyczy tego, kogo zastąpić jednym, a nie jak usunąć OpenJDK z twojego systemu. Dodaj nieco więcej informacji do swojej odpowiedzi, na pytanie nie można odpowiedzieć tylko wykonując następujące kroki.
Bruno Pereira,
4

Dodałem tę linię do pliku środowiska / etc /: JAVA_HOME = "/ usr / lib / jvm / jdk1.6.0_23" i dodałem JAVA_HOME / bin do zmiennej PATH, ALE system operacyjny nadal nie rozpoznaje polecenia java, mówi: nie jest zainstalowany i oferuje mi gcj i openjdk.

Sprawdziłeś to?

echo $JAVA_HOME 
echo $PATH

Jeśli nie potrzebujesz: odinstaluj openjdk i gcj w synaptic lub w apt-get.

apt-get remove gcj 
apt-get remove openjdk

Wówczas zakazałbym Javy alternatyw i robiłem głównie, jak sugerował BillThor, dlaczego dałem mu głos.

which javac
which java

powinien wskazywać, gdzie zainstalowałeś Javę i gdzie znajduje się ona w ŚCIEŻCE.

nieznany użytkownik
źródło
Nie mam zainstalowanego gcj ani openjdk ... Po prostu wypróbowałem whichpolecenia i nic nie drukuje. Okazało się, że zapomniałem symbolu $ przed zmienną JAVA_HOME w PATH, zrestartuję teraz i zobaczę, jak to działa.
jurchiks
Zrestartowałem komputer, ale whichpolecenie wciąż nic nie pokazuje. Zarówno zmienne JAVA_HOME, jak i PATH są poprawne: 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 Gdzie może być problem? Edycja: BOŻA CHOLERA, dlaczego w komentarzach nie ma podziałów?
jurchiks
a) ponowne uruchomienie komputera nie powinno być wymagane. Ponownie otwórz powłokę powinno wystarczyć lub przeloguj się jako użytkownik. b) Zajrzyj do pomocy dotyczącej formatowania komentarzy. Rozumiem, echo $PATH $JAVA_HOME/bin:/usr/local/sbin...ale w rezultacie $ JAVA_HOME musi zostać oszacowany - coś jest nie tak lub raportowanie jest błędne. c) Linebreaks: Nie ma ich, więc ciągle wciskamy ENTER zbyt wcześnie, a potem zegar tyka, ponieważ edycja jest dozwolona tylko przez kilka minut - ciągle wchodzę w tę pułapkę. Nienawidzę tego! :)
użytkownik nieznany
Cóż, zmienna JAVA_HOME znajduje się w tym samym pliku (/ etc / environment), tylko w pierwszym wierszu. Może powinno być gdzie indziej? Rozpoznaje to, gdy piszę echo $JAVA_HOME...
jurchiks,
Moje pytanie brzmiało: czy echo $PATHwypisuje, $JAVA_HOME...czy wypisuje wartość JAVA_HOME, tj .: /usr/lib/jvm/jdk1.6.0_23?
użytkownik nieznany
3
  1. Otwórz System-> Administracja-> Menedżer pakietów Synaptic, a następnie całkowicie usuń OpenJDK.
  2. Testowa wersja pisania Java java -versionw powłoce (wyświetli się tylko Sun Java)
  3. Rodzaj sudo update-java-alternatives -l
  4. skończyłeś. Teraz masz zainstalowaną tylko Javę Sun i jest ona skonfigurowana jako domyślny jdk

i działa tylko, jeśli masz zainstalowane dwa jdk i chcesz ustawić sun-java jako środowisko domyślne

Shohrat
źródło
2

Używając Ubuntu 10.10, wydaje się, że musisz najpierw oznaczyć do usunięcia libaccess-bridge-java w Synaptic, a następnie zaznaczyć openjdk-6-jre-headless.

Skończyło się na liście do usunięcia:

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

To działało, ale pozostawiło katalog /etc/java-6-openjdkzawierający różne pliki i podkatalogi, które odizolowałem w nowym katalogu. Nie było żadnych niezwykłych efektów, więc przypuszczalnie jest to tylko resztka.

Zostało mi to z Javą, którą pobrałem bezpośrednio ze strony Java. Jednak pomimo ustawienia go jako domyślnego i utworzenia łącza do katalogu wtyczek Firefox, to już nie działało. Instalując sun-java6-jre i powiązane z nim pakiety gsfonts-x11, odbcinst, odbcinst1debian2, sun-java6-bin i unixodbc, za pośrednictwem Synaptic, zobaczyłem, że wtyczka Java znów zaczyna działać. Usunięcie łącza w katalogu wtyczek i zastąpienie go rzeczywistym plikiem libnpjp2.so nie działało. Użycie łącza do plików libjavaplugin_oji.so w katalogach ns7 lub ns7-gcc29 w Javie zainstalowanych przez Synaptic również nie działało. Sugeruje mi to, że aby uzyskać najnowszą wtyczkę Java w Firefoksie, można postępować zgodnie z instrukcjami na stronie internetowej Java, i że do uruchomienia pobranej Javy potrzebna jest zintegrowana Java Java dowolnej odmiany. który następnie polega na działaniu na otaczających go plikach po aktywacji wtyczki. Chociaż pełne zrozumienie kodu składającego się z Javy i Linuksa byłoby konieczne, aby naprawdę rozwiązać jego tajemnice, być może te eksperymenty są pomocne w znalezieniu powodów, dla których w tym przypadku mogą być potrzebne dwie Javy. Można przynajmniej usunąć całą Javę, jeśli ktoś uzna to za przydatne.

Steve
źródło
2

To, co robię na nowych komputerach z systemem Ubuntu 10.10, to

  • dodaj java-6-sun,
  • usuń openJDK (najpierw dodaj Sun Java, w przeciwnym razie kilka rzeczy zostanie usuniętych, takich jak tomcat itp.)

To jest dla mnie w porządku, nie ma już zależności openJDK

Bob Yoplait
źródło
java-6-sun nie jest to pakiet domyślny ubuntu, czy jest?
Fabian Zeindl
2

Odpowiedzi na to pytanie nie działały dla mnie. Oznacza to, że następujące nie powiodło się:

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

Z błędem:

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

Zamiast tego wypróbuj te instrukcje :

  1. Otwórz Centrum oprogramowania Ubuntu .
  2. Szukaj IcedTea.
  3. Usuń wtyczkę Java IcedTea ( icedtea-6-jre-cacao), jeśli jest zainstalowana.
  4. Wybierz OpenJDK Java 7 Runtime.
  5. Kliknij Zainstaluj.
  6. Poczekaj, aż pakiet 41,6 MB zostanie pobrany i zainstalowany.

OpenJDK (IcedTea) jest teraz zainstalowany, co powinno pozwolić (jeśli wystąpił ten błąd) na kontynuowanie instalacji JDK Oracle bez błędu.

Zobacz też:

Dave Jarvis
źródło
1

Po pierwsze: usuń wtyczkę openjdk i icedtea.

sudo apt-get remove openjdk* icedtea*

Po drugie: skopiuj plik .bin jdk do / opt lub / usr / java i rozpakuj go.

sudo cp jdk_1.16.0.bin /usr/java

Po trzecie: umieść łącze pliku java do / 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

zaktualizuj alternatywy za pomocą update-alternatives

Utwórz symboliczne łącze do wtyczki Java w katalogu wtyczek Firefox.

Utwórz dowiązanie symboliczne do pliku libnpjp2.so wtyczki Java w katalogu wtyczek Firefox:

   cd  

<Firefox>/plugins


 ln -s  

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

Mam nadzieję że to pomoże.

Ubuntuser
źródło
Nie przegapiłeś ani jednego kroku po cp i przed połączeniem? I: Sugerujesz ręczne łączenie, ale w java / bin jest 45 plików, większość z nich jest wykonywalna. Czy chciałbyś utworzyć 25 symbolicznych linków? Wolałbym zmienić ŚCIEŻKĘ.
użytkownik nieznany
o ile wiem, kroki są prawidłowe. możesz zapoznać się z samouczkiem na stronie instalacyjnej Java (Oracle). powyższe kroki działały jednak dla mnie! daj mi znać, jak sobie radzisz.
Ubuntuser