OpenJDK / OpenJRE를 올바르게 제거하고 SunJDK / SunJRE를 기본값으로 설정하는 방법


49

우분투는 Sun JDK / JRE보다 OpenJDK / JRE를 선호하는 것 같습니다. Sun JRE, JDK 및 플러그인을 설치하고 OpenJDK 관련 패키지를 뽑는 데 시간을 보냈지 만 apt-get은 일부 패키지를 종속성으로 다시 설치했습니다. Sun Java 패키지를 위해이 동작을 정정 할 수 있습니까? Java 스택을 하나만 설치하고 싶습니다 (예, 약간의 OCD 이지만 시스템을 깨끗하게 유지하고 싶습니다) .Sun Java가되고 싶습니다.

업데이트 : Marcos Roriz가 지적한 것처럼 문제는 OpenJDK를 가리키는 default-jre (Java 종속 패키지가 의존하는 데 사용되는) 인 것처럼 보이므로 default-jre / default-jdk를 해킹하는 방법에 대한 질문이 있습니다. Sun Java에.


누구든지 oracle jdk로 답변을 업데이트하십시오.
LoveToCode

답변:


35

이전 버전의 Ubuntu (9.10 이하)에 Sun Java 설치

나는 약 3 년 전에 우분투 8.04와 같은 문제를 겪었다 고 생각합니다. openjre를 사용할 때 이상한 문제가 있었고 문제는 sun jre 버전을 사용하여 해결되었습니다. 10.04부터 sun java가 삭제되고 openjre로 대체되었으므로 10.04 이하 버전에 적용되는 터미널의 단계는 다음과 같습니다.

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

(모든 Sun Java 관련. 확인하기 위해)

그 후, openjdk를 제거하면 sun java 만 있습니다. 제거하지 않은 경우 둘 다 있습니다. 하나에서 다른 것으로 변경하려면 다음을 수행하십시오.

sudo update-java-alternatives -l -사용 가능한 Java 엔진 목록이 표시됩니다.

Java 대안의 이름은 왼쪽에있는 이름이므로 openjdk는 다음과 같이 표시됩니다.

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

그리고 다음과 같이 시스템을 openjdk로 설정하십시오.

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

Sun을 사용하려면 다음을 수행하십시오 (sun 패키지 설치 후).

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

java 7 버전을 사용하려면 위에서 언급 한 숫자 6을 7로 변경하십시오. 예를 들어 openjre 버전 7을 설치하려면 다음과 같이하십시오.

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

최신 버전의 Ubuntu에 Sun Java 설치 (10.04 이상)

터미널을 열고 다음을 입력하십시오.

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

시스템에 Sun Java 버전을 설치해야합니다. 다른 Java 대안이있는 경우 간단히 다음을 수행하십시오.

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

설치를 자동으로하려면 다음을 입력하십시오.

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

그 후 기본 환경 변수를 설정하려면 다음을 수행하십시오.

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

PPA에는 버전 6, 7 및 8이 포함되어 있습니다. 따라서 설치 행에서 번호를 변경하여 간단히 설치할 수 있습니다. 예를 들면 다음과 같습니다.

sudo apt-get install oracle-java8-installer

Java 8을 설치합니다. 사용하려는 Java 버전을 설치하고 update-java-alternatives명령 을 사용하여 버전을 기본값으로 설정 한 후 다음을 입력하여 사용중인 버전을 확인할 수 있습니다.

java -version

해당 시점에 사용중인 기본 버전이 표시됩니다.

또한 OpenJRE / JDK가 Sun Java로 변경하여 해결되는 많은 문제가 있었을 때 2 년에서 3 년 전에 먼 길을 왔다는 점도 언급하고 싶습니다.


11

문제는 일부 Java 패키지가 openjdk-jre를 가리키는 default-jre에 의존한다는 것입니다. openjdk를 영구적으로 제거하는 쉬운 방법이 없다고 생각합니다. 문제는 Java 패키지 / 프로그램을 설치할 때 openjdk에 다시 충돌한다는 것입니다.

그러나 두 가지 모두를 가지고 싶다면 Java 런타임 프로그램 (java, javah, javap 등)을 태양 구현으로 쉽게 설정할 수 있습니다. 해:

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

또는 자바 개발자 인 경우 (sdk 및 src 설치) :

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

다음을 사용하여 기본 프로그램으로 설정하십시오.

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

1
예, 이것이 default-jre에 관한 것입니다. 아니요, 저는 Sun과 Open JDK를 갖고 싶지 않습니다. 이것이 중요한 문제입니다. 하나만 가지고 Sun JDK가되도록하십시오. default-jre를 해킹하여 Sun JRE를 가리키는 방법이 있습니까?
Ivan

그래, default-jre오늘 저녁에 sun-java를 가리 키도록 패키지 를 다시 작성하려고합니다 . 지금 나는 일하고 있습니다.
Marcos Roriz Junior

6

.jdk1.6.0_23.jinfo파일이 제공되는 프로그램과 경로의 목록이어야합니다. 빈칸 뒤에 설명 헤더가 있습니다. 그런 다음 세 가지 필드 형식의 프로그램 목록 : 항목 유형 (jre / jkd / plugin); 프로그램 이름; 그리고 경로. 내용이 어떻게 보이는지 확인하기 위해 사용할 수있는 jinfo 파일이 있어야합니다. 대체 메커니즘에서 작성할 링크를 판별하는 데 사용됩니다. 내 썬 패키지의 책임자입니다.

이름 = java-6-sun-1.6.0.22
alias = java-6-sun
우선 순위 = 63
section = non-free

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

대체 메커니즘을 사용하지 않고 기본 Java 명령을 대체하려면 경로에서 Java 경로를 / usr / bin 앞에 두십시오.

수동 설치를 할 때에 Java를 설치 /opt합니다. 귀하의 설치를 위해에 설치했을 것입니다 /opt/jdk1.6.0_23. 그런 다음 변수 $JAVA_HOME/bin의 시작 부분에 경로 를 넣습니다 PATH.

편집 : 이것은 전체 Sun 파일입니다. 참고 .java-6-sun.jinfo는에 대한 심볼릭 링크 .java-6-sun-1.6.0.22.jinfo입니다.

이름 = java-6-sun-1.6.0.22
alias = java-6-sun
우선 순위 = 63
section = non-free

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 schemagen / usr / lib / jvm / java-6-sun / bin / schemagen
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
플러그인 xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so
플러그인 mozilla-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so

Java가 설치되어 있지 않으므로 관련 항목이 없거나 아무것도 설치되어 있지 않으며 .jinfo 파일이 없습니다. 기본적으로 설치된 위치를 읽었으므로 usr / lib / jvm 폴더를 직접 만들었습니다. 나는 그것을 그렇게 유지할 것입니다. 그렇기 때문에 Sun의 JDK에 대한 .jinfo 파일의 전체 내용을보고 싶습니다.
jurchiks

전체 .jinfo 파일을 추가했습니다.
BillThor

6

openjdk 및 icedtea를 삭제하십시오.

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

/etc/apt/sources.list에 다음을 추가하십시오

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

Sun / Oracle JRE 또는 JDK를 설치하십시오.

apt-get install oracle-jdk7-installer
apt-get install oracle-java7-installer 

2
그리고이 후에 당신은 전혀 Java가없는 채로 남아 있습니다 ... 질문은 실제로 시스템에서 OpenJDK를 제거하는 방법이 아니라 누가 하나를 다른 것으로 교체 해야하는지에 관한 것입니다. 답변에 약간의 정보를 추가하면 다음 단계를 수행해야만 질문에 답변 할 수 없습니다.
Bruno Pereira

4

이 줄을 / etc / environment 파일 (JAVA_HOME = "/ usr / lib / jvm / jdk1.6.0_23")에 추가하고 JAVA_HOME / bin을 PATH 변수에 추가했지만 OS는 여전히 java 명령을 인식하지 못합니다. 설치되지 않았으며 gcj 및 openjdk를 제공합니다.

확인 했습니까?

echo $JAVA_HOME 
echo $PATH

필요하지 않은 경우 : 시냅틱 또는 apt-get으로 openjdk 및 gcj를 제거하십시오.

apt-get remove gcj 
apt-get remove openjdk

나는 대안에서 자바를 금지하고, BillThor가 제안한 것처럼 주로 내가 왜 그를 공짜로 보냈습니까?

which javac
which java

java를 설치 한 위치와 PATH에서 찾을 수있는 위치를 가리켜 야합니다.


gcj 또는 openjdk가 설치되어 있지 않습니다 ... 그냥 which명령을 시도하면 아무것도 인쇄되지 않습니다. PATH에서 JAVA_HOME 변수 앞에 $ 기호를 잊어 버렸다는 것을 알게되었습니다. 지금 다시 시작하여 어떻게 진행되는지 보겠습니다.
jurchiks

PC를 다시 시작했지만 which명령이 여전히 표시되지 않습니다. JAVA_HOME 및 PATH 변수는 모두 정확합니다. 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 어디에 문제가있을 수 있습니까? 편집 : 하나님 DAMN IT, 왜 주석에 줄 바꿈이 없습니까 ??
jurchiks 2013

a) PC를 ​​다시 시작할 필요는 없습니다. 쉘을 다시 열면 충분하거나 대부분 사용자로 다시 로그인해야합니다. b) 주석에서 서식을 지정하려면 도움말 내부를 살펴보십시오. 내가 볼 수 echo $PATH $JAVA_HOME/bin:/usr/local/sbin...있지만, $ JAVA_HOME이 평가되어야 결과에 - 뭔가 잘못, 또는보고를 mistakable입니다. c) 줄 바꿈 : 그들은 거기에 없기 때문에 ENTER를 너무 일찍 누르십시오. 그리고 편집은 몇 분만 허용되기 때문에 시계가 틱합니다. 나는 끊임없이 그 함정에 들어갑니다. 난 싫어! :)
사용자가 알 수 없음

JAVA_HOME 변수는 첫 번째 행과 동일한 파일 (/ etc / environment)에 있습니다. 어딘가에 있을까요? 내가 입력 할 때 그것을 인식합니다 echo $JAVA_HOME...
jurchiks

내 질문은 : JAVA_HOME의 값을 인쇄 합니까 아니면 echo $PATH인쇄 합니까 ? $JAVA_HOME.../usr/lib/jvm/jdk1.6.0_23
사용자 알 수 없음

3
  1. 시스템-> 관리-> 시냅틱 패키지 관리자를 연 다음 OpenJDK를 완전히 제거하십시오.
  2. java -version쉘에서 Java 입력 테스트 버전 (Sun Java 만 표시됨)
  3. 유형 sudo update-java-alternatives -l
  4. 당신은 끝났습니다. 이제 당신은 sun java 만 설치했으며 기본 jdk로 설정되었습니다.

두 개의 jdk가 설치되어 있고 sun-java를 기본 환경으로 설정하려는 경우에만 작동합니다.


2

Ubuntu 10.10을 사용하면 Synaptic에서 먼저 libaccess-bridge-java 제거를 표시 한 다음 openjdk-6-jre-headless를 표시해야합니다.

나는 제거 할 목록으로 끝났습니다.

ca-certificates-java, icedtea-6-jre-cacao, libaccess-bridge-java, libaccess-bridge-java-jni, openjdk-6-jre, openjdk-6-jre-headless, openjdk-6-jre-lib입니다.

이것은 효과가 있었지만 /etc/java-6-openjdk여러 파일과 하위 디렉토리가있는 디렉토리를 남겨두고 새 디렉토리에서 분리했습니다. 특별한 효과는 없었으므로 아마도 남은 잔재 일 것입니다.

이것은 Java 웹 사이트에서 직접 다운로드 한 Java로 나를 떠났습니다. 그러나 기본값으로 설정하고 Firefox 플러그인 디렉토리에 대한 링크를 작성했지만 더 이상 작동하지 않았습니다. Sun-java6-jre 및 관련 패키지 gsfonts-x11, odbcinst, odbcinst1debian2, sun-java6-bin 및 unixodbc를 설치하면 Synaptic을 통해 Java 플러그인이 다시 작동하기 시작했습니다. 플러그인 디렉토리에서 링크를 제거하고 실제 libnpjp2.so 파일로 대체하지 못했습니다. Synaptic을 통해 설치된 Java의 ns7 또는 ns7-gcc29 디렉토리에있는 libjavaplugin_oji.so 파일에 대한 링크를 사용하면 작동하지 않았습니다. 이것은 Firefox에서 최신 Java 플러그인을 얻으려면 Java 웹 사이트의 지침을 따르고 다운로드 된 Java를 실행하는 데 다양한 종류의 통합 Linux Java가 필요하다는 것을 나타냅니다. 그런 다음 플러그인이 활성화되면 주변 파일에 대한 작업에 의존합니다. Java와 Linux로 구성된 코드를 완전히 이해해야 실제로 미스테리를 해결할 수 있지만, 이러한 실험은이 경우 두 개의 Java가 필요한 이유를 찾는 데 도움이 될 수 있습니다. 누군가가 그렇게하는 것이 유용하다고 생각되면 적어도 모든 Java를 제거하는 것이 가능합니다.


2

내가 새로운 우분투 10.10 머신에서하는 일은

  • java-6-sun을 추가하십시오.
  • openJDK를 제거하십시오 (먼저 sun Java를 추가하십시오. 그렇지 않으면 많은 것이 바람둥이처럼 제거됩니다)

그런 다음 더 이상 OpenJDK 종속성이 없습니다.


java-6-sun은 우분투 기본 패키지가 아닌가?
Fabian Zeindl

2

이 질문에 대한 답변은 저에게 효과적이지 않았습니다. 즉, 다음이 실패했습니다.

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

오류가있는 경우 :

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

대신 다음 지침을 시도하십시오 .

  1. 우분투 소프트웨어 센터를 .
  2. IcedTea를 검색하십시오.
  3. IcedTea Java 플러그인 ( icedtea-6-jre-cacao)이 설치되어 있으면 제거하십시오 .
  4. OpenJDK Java 7 Runtime을 선택하십시오.
  5. 설치를 클릭하십시오.
  6. 41.6MB 패키지가 다운로드되어 설치 될 때까지 기다립니다.

OpenJDK (IcedTea)가 설치되었으므로이 오류가 발생한 경우 오류없이 Oracle JDK를 계속 설치할 수 있습니다.

또한보십시오:


1

먼저 openjdk 및 icedtea 플러그인을 제거하십시오.

sudo apt-get remove openjdk* icedtea*

둘째 : .bin jdk 파일을 / opt 또는 / usr / java로 복사하고 압축을 푸십시오.

sudo cp jdk_1.16.0.bin /usr/java

셋째 : 자바 파일의 링크를 / 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

업데이트 대안을 사용하여 대안을 업데이트

Firefox 플러그인 디렉토리에 Java 플러그인에 대한 기호 링크를 작성하십시오.

Firefox 플러그인 디렉토리에 Java 플러그인 libnpjp2.so 파일에 대한 기호 링크를 작성하십시오.

   cd  

<Firefox>/plugins


 ln -s  

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

도움이 되었기를 바랍니다.


cp 이후와 연결하기 전에 한 단계를 놓치지 않았습니까? 그리고 : 수동 링크를 제안하지만 java / bin에는 45 개의 파일이 있으며 대부분 실행 파일입니다. 25 개의 심볼릭 링크를 만드시겠습니까? PATH 변경을 선호합니다.
사용자가 알 수 없음

내가 아는 한 단계가 정확합니다. sun (oracle 's) java 설치 페이지의 자습서를 참조 할 수 있습니다. 위의 단계는 나를 위해 일했습니다!. 어떻게 지내는지 알려주세요.
Ubuntuser
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.