모든 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.