Java ile ilgili tüm alternatifleri güncellemenin bir yolu var mı?


51

Kullanarak Java ile ilgili tüm alternatifleri hızlıca değiştirmenin bir yolu var mı update-alternatives?

Örneğin sudo update-alternatives --config java, Java'yı 7'ye değiştirmek isterseniz, Java 7 OpenJdk'i çalıştırıp seçiyorum. Ama kaçarsam update-alternatives --get-selections | grep javaaşağıdakileri alırım:

appletviewer                   auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/appletviewer
extcheck                       auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/extcheck
idlj                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/idlj
itweb-settings                 auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/itweb-settings
jar                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jar
jarsigner                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jarsigner
java                           manual   /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
javac                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javac
javadoc                        auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javadoc
javah                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javah
javap                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javap
javaws                         auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/javaws
jconsole                       auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jconsole
jdb                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jdb
jexec                          auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/jexec
jhat                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jhat
jinfo                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jinfo
jmap                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jmap
jps                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jps
jrunscript                     auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jrunscript
jsadebugd                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jsadebugd
jstack                         auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jstack
jstat                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jstat
jstatd                         auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jstatd
keytool                        auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/keytool
native2ascii                   auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/native2ascii
orbd                           auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/orbd
pack200                        auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/pack200
policytool                     auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/policytool
rmic                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/rmic
rmid                           auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/rmid
rmiregistry                    auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/rmiregistry
schemagen                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/schemagen
serialver                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/serialver
servertool                     auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/servertool
tnameserv                      auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/tnameserv
unpack200                      auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/unpack200
wsgen                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/wsgen
wsimport                       auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/wsimport
xjc                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/xjc

Gördüğünüz gibi, Java alternatifim 7'ye değiştirildi, ancak OpenJDK 6'ya dayanan diğer tüm alternatifler değiştirilmedi. Elbette her birini manuel olarak değiştirebilir veya bunu yapmak için bir senaryo yazabilirim, ancak bunu yapmanın daha iyi bir yolu olduğunu varsayıyorum.

Yanıtlar:


70

İşin püf noktası kullanmak update-java-alternatives( java-commonpaketten).

Böylece OpenJDK 6 ila 7'ye gitmek için update-java-alternatives -lJava alternatiflerinin listesini alırdım ve daha sonra sudo update-java-alternatives -s java-1.7.0-openjdk-amd64JDK'ya kullanırdım.

NOT: Yukarıdaki komut aşağıdaki hataları attı,

update-alternatives: error: no alternatives for mozilla-javaplugin.so.
update-java-alternatives: plugin alternative does not exist: /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/IcedTeaPlugin.so

Bunun nedeni openjdk eklentisinin varsayılan olarak kurulu olmamasıdır. Koşuyu düzeltmek için

sudo apt-get install icedtea-7-plugin

ve tekrar çalıştırın update-java-alternatives.


8
Eklentiyi kurmak zorunda değilsiniz (ve güvenlik nedenlerinden dolayı ihtiyacınız yoksa kullanmamalısınız). update-java-alternativeseklenti bir hata atsa bile, diğer tüm java alternatiflerini değiştirir.
daniel kullmann

Oracles JVM'nin nesi var? Bunu nasıl kullanabilirim? Ve JDK'ye özel çalıştırılabilirler?
keiki

2
Koşu update-java-alternatives --set java-1.8.0-openjdk-amd64Hala var default-java -> /usr/lib/jvm/java-7-oracle. Buna no alternatives for mozilla-javaplugin.sohata mı neden oluyor ? Bunu da nasıl değiştirebilirim?
lony

3

Jbro aynı soruyu http://ubuntuforums.org/showthread.php?t=1817528 adresinde sordu ve bu sorun için bir senaryo yazdı,

#!/bin/bash

update-alternatives --get-selections | grep -i openjdk |
while read line
do
    alternative=$(echo $line | awk '{print $1}')
    path=$(echo $line | awk '{print $3}')
    newpath=$(echo $path | sed -e 's/java-6-openjdk/java-6-sun/')
    status=unchanged
    if [ -f $newpath ]
    then
    status=modified
    echo "-> update-alternatives --set $alternative $newpath"
    update-alternatives --set $alternative $newpath
    else
    echo "$alternative unchanged"
    fi
done

Daha iyi bir cevap yoksa, bu sağlam bir geçici çözüm gibi görünüyor, ancak bununla update-alternativesbaşa çıkmanın daha iyi bir yolu olması gerektiğini düşünüyorum .

Kodu biraz düzenlemiştim, çünkü değişiklikleri yüklemeden önce yapmanıza izin vermiyor. Aşağıdaki gibi iki satır daha ekledim ...

#!/bin/bash

update-alternatives --get-selections | grep -i openjdk |
while read line
do
    alternative=$(echo $line | awk '{print $1}')
    path=$(echo $line | awk '{print $3}')
    newpath=$(echo $path | sed -e 's/java-6-openjdk/java-6-sun/')
    status=unchanged
    if [ -f $newpath ]
    then
    status=modified
echo "-> update-alternatives --install /usr/bin/$alternative $alternative $newpath 1"
update-alternatives --install /usr/bin/$alternative $alternative $newpath 1
    echo "-> update-alternatives --set $alternative $newpath"
    update-alternatives --set $alternative $newpath
    else
    echo "$alternative unchanged"
    fi
done

1

Oracle JVM için şunu çalıştırın:

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

0

<TL; DR> update-java-alternatörleri , hangi alternatiflerin değiştirileceğini belirlemek için .jinfo dosyasını kullanır, ancak ayrıca ayrı ayrı yapılandırılmalarını bekler.

Eğer indirdiğiniz JRE / JDK güncelleme-java-alternatifleri ile değiştirilmezse, yeni bir .jinfo dosyası ve güncelleme-değiştirici girişler oluşturun

[Detaylar]

Manuel olarak yapılandırmak için:

  1. Yeni jdk’nizi mevcut jdk’ın yanında açın. /usr/lib/jvm/

  2. Klasördeki başka bir .jinfo dosyasını çoğaltarak bir .jdkname.jinfo dosyası oluşturun (veya başka bir Ubuntu kurulumundan bir tane alın: bu şablondan başka bir şey yapmazsınız).

    Dosya adı jdkname .jinfo, jdk foldername'siyle eşleşmelidir.

    Başlığı (adları) ve dosya yollarını (program girişlerini) yeni yüklemenize uygun olacak şekilde ayarlamak için içeriği değiştirin.

    Sürümünüzde belirtilen programlara atıfta bulunan tüm satırları kaldırın ve yeni programlara satır ekleyin. /bin

  3. Şu anda .jinfo paketindeki tüm programlar için bu şablonla alternatifler üret:

    sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/**jdkname**/bin/java 100

    (İlgili bazı yanıtlar bunu / bin içeriğinden yazmıştır ya da komut dosyası komutlarını oluşturmak için .jinfo dosyanızda regexp araması / değiştirme işlemi yapabilirsiniz.)

    Jdk sürümünü otomatik bayrak kullanarak ayarlarken göz önünde bulundurulması gereken 100 değerin sadece bir öncelik olduğunu unutmayın.

  4. Java alternatiflerini kontrol edin ve JDK'yi kullanmak için geçiş yapın.

    update-java-alternatives -l  
    update-java-alternatives -s jdkname  

    Bazı JDK'lerin JRE içermediğine dikkat edin, bu nedenle onu ekleyin veya bu jinfo girişlerini kaldırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.