모든 Java 관련 대안을 업데이트하는 방법이 있습니까?


51

?를 사용하여 모든 Java 관련 대안을 신속하게 전환하는 방법이 update-alternatives있습니까?

예를 들어 Java를 7로 전환 sudo update-alternatives --config java하려면 Java 7 OpenJdk를 실행 하고 선택합니다. 그러나 내가 달리면 update-alternatives --get-selections | grep java다음과 같은 것을 얻습니다.

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

보시다시피, Java 대안은 7로 전환되었지만 OpenJDK 6 기반의 다른 모든 대안은 전환되지 않았습니다. 물론 각 스위치를 수동으로 전환하거나 스크립트를 작성하여이 작업을 수행 할 수있는 더 좋은 방법이 있다고 가정합니다.

답변:


70

요령은 패키지 update-java-alternatives에서 사용 하는 것 java-common입니다.

OpenJDK 6 ~ 7 update-java-alternatives -l로 가려면 Java 대안 목록을 얻은 다음 sudo update-java-alternatives -s java-1.7.0-openjdk-amd64JDK에 익숙 했습니다.

참고 : 위의 명령은 다음과 같은 오류가 발생했습니다.

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

openjdk 플러그인이 기본적으로 설치되어 있지 않기 때문입니다. 실행을 수정하려면

sudo apt-get install icedtea-7-plugin

다시 실행하십시오 update-java-alternatives.


8
플러그인을 설치할 필요가 없습니다 (보안상의 이유로 플러그인을 필요로하지 않아도됩니다). update-java-alternatives플러그인 설정에서 오류가 발생하더라도 다른 모든 Java 대안을 변경합니다.
다니엘 쿨만

Oracle JVM은 무엇입니까? 어떻게 사용할 수 있습니까? 그리고 JDK 특정 실행 파일?
keiki

2
update-java-alternatives --set java-1.8.0-openjdk-amd64내가 아직 실행 중 default-java -> /usr/lib/jvm/java-7-oracle입니다. 이것은에 의해 발생 no alternatives for mozilla-javaplugin.so오류? 이것도 어떻게 바꿀 수 있습니까?
lony

3

jbro는 http://ubuntuforums.org/showthread.php?t=1817528 에서 같은 질문 을하고이 문제에 대한 스크립트를 작성했습니다.

#!/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

더 나은 대답이 없으면 확실한 해결 방법처럼 보이지만 update-alternatives이것을 처리 하는 더 좋은 방법이 있어야한다고 가정합니다 .

코드를 설치하기 전에 변경을 수행 할 수 없으므로 코드를 약간 편집했습니다. 다음과 같이 두 줄을 더 추가했습니다 ...

#!/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의 경우 다음을 실행하십시오.

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

0

<TL; DR> update-java-alternatives 는 .jinfo 파일을 사용 하여 전환 대안을 결정 하지만 개별적으로 구성 할 것으로 예상합니다.

다운로드 한 JRE / JDK가 update-java-alternatives로 전환되지 않으면 새 .jinfo 파일 및 업데이트 대체 항목을 작성하십시오.

[세부]

수동으로 구성하려면 다음을 수행하십시오.

  1. 기존 jdk와 함께 새 jdk의 압축을 풉니 다. /usr/lib/jvm/

  2. 폴더에 다른 .jinfo 파일을 복제 하여 .jdkname.jinfo 파일을 생성하십시오 (또는 다른 Ubuntu 설치에서 파일을 가져 오십시오 : 템플릿을 따름).

    파일 이름 jdkname .jinfo는 jdk 폴더 이름과 일치해야합니다.

    새 설치와 일치하도록 헤더 (이름) 및 파일 경로 (프로그램 항목)를 설정하도록 컨텐츠를 수정하십시오.

    버전에서 생략 된 프로그램을 참조하는 행을 제거하고 새 프로그램에 대한 행을 추가하십시오. /bin

  3. 이 템플릿을 사용하여 .jinfo 패키지에있는 모든 프로그램에 대한 대안을 생성하십시오.

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

    (몇 가지 관련 답변이 / bin의 내용에서 이것을 스크립트로 작성했거나 .jinfo 파일에서 regexp 검색 / 바꾸기를 수행하여 스크립트 명령을 생성 할 수 있습니다.)

    100은 auto 플래그를 사용하여 jdk 버전을 설정할 때 고려되는 우선 순위입니다.

  4. Java 대안을 확인하고 JDK를 사용하도록 전환하십시오.

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

    일부 JDK에는 JRE가 포함되어 있지 않으므로 JRE를 추가하거나 해당 jinfo 항목을 제거하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.