?를 사용하여 모든 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 기반의 다른 모든 대안은 전환되지 않았습니다. 물론 각 스위치를 수동으로 전환하거나 스크립트를 작성하여이 작업을 수행 할 수있는 더 좋은 방법이 있다고 가정합니다.
답변
요령은 패키지 update-java-alternatives
에서 사용 하는 것 java-common
입니다.
OpenJDK 6 ~ 7 update-java-alternatives -l
로 가려면 Java 대안 목록을 얻은 다음 sudo update-java-alternatives -s java-1.7.0-openjdk-amd64
JDK에 익숙 했습니다.
참고 : 위의 명령은 다음과 같은 오류가 발생했습니다.
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
.
답변
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
답변
Oracle JVM의 경우 다음을 실행하십시오.
sudo update-java-alternatives -s java-7-oracle
답변
<TL; DR> update-java-alternatives 는 .jinfo 파일을 사용 하여 전환 할 대안을 결정 하지만 개별적으로 구성 할 것으로 예상합니다.
다운로드 한 JRE / JDK가 update-java-alternatives로 전환되지 않으면 새 .jinfo 파일 및 업데이트 대체 항목을 작성하십시오.
[세부]
수동으로 구성하려면 다음을 수행하십시오.
-
기존 jdk와 함께 새 jdk의 압축을 풉니 다.
/usr/lib/jvm/
-
폴더에 다른 .jinfo 파일을 복제 하여 .jdkname.jinfo 파일을 생성하십시오 (또는 다른 Ubuntu 설치에서 파일을 가져 오십시오 : 템플릿을 따름).
파일 이름 jdkname .jinfo는 jdk 폴더 이름과 일치해야합니다.
새 설치와 일치하도록 헤더 (이름) 및 파일 경로 (프로그램 항목)를 설정하도록 컨텐츠를 수정하십시오.
버전에서 생략 된 프로그램을 참조하는 행을 제거하고 새 프로그램에 대한 행을 추가하십시오.
/bin
-
이 템플릿을 사용하여 .jinfo 패키지에있는 모든 프로그램에 대한 대안을 생성하십시오.
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/**jdkname**/bin/java 100
(몇 가지 관련 답변이 / bin의 내용에서 이것을 스크립트로 작성했거나 .jinfo 파일에서 regexp 검색 / 바꾸기를 수행하여 스크립트 명령을 생성 할 수 있습니다.)
100은 auto 플래그를 사용하여 jdk 버전을 설정할 때 고려되는 우선 순위입니다.
-
Java 대안을 확인하고 JDK를 사용하도록 전환하십시오.
update-java-alternatives -l update-java-alternatives -s jdkname
일부 JDK에는 JRE가 포함되어 있지 않으므로 JRE를 추가하거나 해당 jinfo 항목을 제거하십시오.