Como remover corretamente o OpenJDK / OpenJRE e definir o SunJDK / SunJRE como padrão

49

O Ubuntu parece favorecer muito o OpenJDK / JRE sobre o Sun JDK / JRE. Mesmo depois que eu instalei o Sun JRE, JDK e plugin e passei algum tempo retirando pacotes relacionados ao OpenJDK, o apt-get os instalou de volta com alguns pacotes como uma dependência. Esse comportamento pode ser corrigido em favor dos pacotes Sun Java? Gostaria de ter uma única pilha Java instalada (sim, é um pouco de TOC , mas gosto de limpar meus sistemas) e quero que seja Sun Java.

Atualização: como observa Marcos Roriz, o problema parece estar no default-jre (no qual os pacotes dependentes de Java costumam depender) apontando para o OpenJDK, então a questão parece ser sobre como hackear default-jre / default-jdk para apontar para Sun Java.

Ivan
fonte
Por favor, qualquer atualização a resposta com jdk oracle ..
LoveToCode

Respostas:

35

Instalando o Sun Java em versões mais antigas do Ubuntu (9.10 e abaixo)

Eu tive o mesmo problema uma vez cerca de três anos atrás, com o Ubuntu 8.04, eu acho. Houve um problema estranho ao usar o openjre e o problema foi resolvido usando a versão sun jre. Aqui estão as etapas no terminal que se aplicam às versões abaixo da 10.04, desde que a partir da 10.04 sun java foi descartada e substituída pelo openjre:

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

(Tudo relacionado ao Java Sun. Apenas para ter certeza)

Depois disso, se você removesse o openjdk, teria apenas o sun java. Se você não o removeu, você tem os dois. Para mudar de um para outro, faça o seguinte:

sudo update-java-alternatives -l - Isso mostra a lista de mecanismos java que você pode usar.

O nome da alternativa java é o da esquerda; portanto, por exemplo, openjdk seria assim:

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

E você configuraria o sistema para openjdk assim:

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

Se você deseja usar o Sun, faça o seguinte (após a instalação dos pacotes sun):

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

Se você deseja usar a versão java 7, simplesmente altere o número 6 mencionado acima para 7. Por exemplo, se eu quisesse instalar a versão 7 do openjre, faria:

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

Instalando o Sun Java em versões mais recentes do Ubuntu (10.04 uma acima)

Abra o terminal e digite o seguinte:

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

Isso deve instalar a versão Sun Java no seu sistema. Para mudar, basta fazer o seguinte, caso você tenha outras alternativas java:

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

Se você deseja que a instalação seja automática, digite o seguinte:

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

Depois disso, basta fazer o seguinte para definir as variáveis ​​de ambiente padrão:

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

Observe que o PPA inclui as versões 6, 7 e 8. Para instalar qualquer um deles, basta alterar o número na linha de instalação, por exemplo:

sudo apt-get install oracle-java8-installer

Instalaria o Java 8. Depois de instalar a versão Java que você deseja usar e configurar a versão para o padrão com o update-java-alternativescomando, você pode verificar qual versão está usando, digitando o seguinte:

java -version

Ele mostrará a versão padrão que você está usando naquele momento.

Gostaria de mencionar também que o OpenJRE / JDK percorreu um longo caminho de 2 ou 3 anos atrás, quando houve muitos problemas que foram resolvidos com a mudança para o Sun Java.

Luis Alvarado
fonte
11

Eu acho que o problema é que alguns pacotes Java dependem do default-jre, que aponta para o openjdk-jre. Eu não acho que exista uma maneira fácil de desinstalar permanentemente o openjdk. O fato é que você provavelmente encontrará o openjdk novamente quando instalar um pacote / programa java.

Mas se você deseja ter os dois, é fácil definir os programas de tempo de execução java (java, javah, javap e assim por diante) para implementar o sun. Faça:

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

ou se você é um desenvolvedor Java (instale o sdk e srcs):

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

E defina-o como os programas padrão com:

sudo update-java-alternatives -s java-6-sun
Marcos Roriz Junior
fonte
1
Sim, acredito que seja sobre default-jre. Não, eu realmente não quero ter JDKs Sun e Open - eis a questão - ter um e apenas e deixar que seja o Sun JDK. Existe uma maneira de hackear o default-jre para apontar para o Sun JRE?
Ivan
Sim, vou tentar reconstruir o default-jrepacote para apontar para sun-java hoje à noite. Agora eu estou no trabalho.
Marcos Roriz Júnior
6

O .jdk1.6.0_23.jinfoarquivo deve ser uma lista dos programas fornecidos e seus caminhos. Há um cabeçalho descritivo seguido por uma linha em branco. Em seguida, uma lista dos programas em um formato de três campos: tipo de entrada (jre / jkd / plugin); nome do programa; e caminho. Você deve ter alguns arquivos jinfo que podem ser usados ​​para ver como deve ser o conteúdo. Provavelmente, isso é usado pelo mecanismo de alternativas para determinar quais links criar. A cabeça do meu pacote Sun é.

nome = java-6-sun-1.6.0.22
alias = java-6-sun
priority = 63
seção = não livre

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

Se você deseja substituir os comandos Java padrão sem usar o mecanismo de alternativas, coloque seu caminho Java à frente de / usr / bin em seu caminho.

Ao fazer uma instalação manual, eu instalo o Java no /opt. para sua instalação eu teria instalado /opt/jdk1.6.0_23. Então eu coloquei o caminho $JAVA_HOME/binno início da minha PATHvariável.

EDIT: Este é o arquivo Sun inteiro. Nota .java-6-sun.jinfoé um link simbólico para .java-6-sun-1.6.0.22.jinfo.

nome = java-6-sun-1.6.0.22
alias = java-6-sun
priority = 63
seção = não livre

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
plugin xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so
plugin mozilla-javaplugin.so /usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so
BillThor
fonte
Eu não tenho nenhum java instalado, então não tenho nada relacionado a ele, nada instalado, nenhum arquivo .jinfo etc. Criei a pasta usr / lib / jvm, porque eu li que é onde é instalado por padrão e Eu vou continuar assim. É por isso que eu gostaria de ver o conteúdo completo do arquivo .jinfo para o JDK da Sun.
21411 journiks
Adicionei o arquivo .jinfo de sol completo.
BillThor
6

Exclua openjdk e icedtea:

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

adicione o seguinte a /etc/apt/sources.list

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

instale o Sun / Oracle JRE ou JDK:

apt-get install oracle-jdk7-installer
apt-get install oracle-java7-installer 
Fabian Zeindl
fonte
2
E depois disso, você fica sem Java ... A questão realmente se refere a quem substituir um pelo outro, não como remover o OpenJDK do seu sistema. Adicione um pouco mais de informação à sua resposta, a pergunta não pode ser respondida apenas seguindo estas etapas.
Bruno Pereira
4

Adicionei esta linha ao arquivo / etc / environment: JAVA_HOME = "/ usr / lib / jvm / jdk1.6.0_23" e adicionei JAVA_HOME / bin à variável PATH, mas o sistema operacional ainda não reconhece o comando java, diz não está instalado e me oferece gcj e openjdk.

Você checou?

echo $JAVA_HOME 
echo $PATH

Se você não precisar: Desinstale o openjdk e o gcj no synaptic ou com o apt-get.

apt-get remove gcj 
apt-get remove openjdk

Eu proibiria o java de alternativas na época, e fiz principalmente como BillThor sugeriu, por que eu dei a ele um voto positivo.

which javac
which java

deve apontar para onde você instalou o java e onde é encontrado no PATH.

Usuário desconhecido
fonte
Não tenho o gcj ou o openjdk instalado ... Apenas tentei os whichcomandos e ele não imprime nada. Descobri que esqueci o símbolo $ antes da variável JAVA_HOME no PATH, vou reiniciar agora e ver como vai.
21411 journiks
Reiniciou o PC, mas o whichcomando ainda não mostra nada. As variáveis ​​JAVA_HOME e PATH estão corretas: 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 Onde poderia estar o problema? Edit: GOD DAMN IT, por que não há quebras de linha nos comentários?
21411 journiks
a) não é necessário reiniciar o PC. Reabrir o shell deve ser suficiente ou, na maioria das vezes, entrar novamente como usuário. b) Olhe dentro da ajuda para formatar os comentários. Entendo, echo $PATH $JAVA_HOME/bin:/usr/local/sbin...mas no resultado $ JAVA_HOME deve ser avaliado - há algo errado ou seu relatório é incorreto. c) Quebras de linha: elas não estão lá, de modo que pressionamos ENTER muito cedo e depois o relógio bate, porque a edição é permitida apenas por alguns minutos - eu constantemente pego nessa armadilha. Eu odeio isso! :)
usuário desconhecido
Bem, a variável JAVA_HOME está no mesmo arquivo (/ etc / environment), apenas na primeira linha. Talvez devesse estar em outro lugar? Reconhece-o quando digito echo $JAVA_HOME...
jurchiks
A minha pergunta foi: Does echo $PATHimpressão $JAVA_HOME...ou ele imprimirá o valor de JAVA_HOME, ou seja: /usr/lib/jvm/jdk1.6.0_23?
usuário desconhecido
3
  1. Abra Sistema-> Administração-> Gerenciador de Pacotes Synaptic e remova completamente o OpenJDK.
  2. Teste a versão do Java digitando java -versionno shell (ele exibirá apenas java Sun)
  3. Tipo sudo update-java-alternatives -l
  4. você terminou. Agora você tem apenas o sun java instalado e está configurado como jdk padrão

e funciona apenas se você tiver dois jdk instalados e quiser definir o sun-java como um ambiente padrão

Shohrat
fonte
2

Usando o Ubuntu 10.10, parece que você precisa marcar para remover o libaccess-bridge-java primeiro no Synaptic e depois marcar openjdk-6-jre-headless.

Acabei com uma lista a ser removida:

ca-certificate-java, icedtea-6-jre-cacao, libaccess-bridge-java, libaccess-bridge-java-jni, openjdk-6-jre, openjdk-6-jre-sem-cabeça, openjdk-6-jre-lib.

Isso funcionou, mas deixou um diretório para /etc/java-6-openjdktrás com vários arquivos e subdiretórios, que eu isolado em um novo diretório. Não houve efeitos incomuns, portanto, presumivelmente, é apenas um restante remanescente.

Isso me deixou com o Java que eu havia baixado diretamente do site do Java. No entanto, apesar de defini-lo como padrão e criar o link para o diretório de plugins do Firefox, ele não funcionou mais. Instalando sun-java6-jre e seus pacotes associados gsfonts-x11, odbcinst, odbcinst1debian2, sun-java6-bin e unixodbc, via Synaptic, viram o plugin Java começar a funcionar novamente. Remover o link no diretório plugins e substituí-lo pelo arquivo libnpjp2.so real não funcionou. O uso de um link para os arquivos libjavaplugin_oji.so nos diretórios ns7 ou ns7-gcc29 no Java instalado por meio do Synaptic também não funcionou. Isso sugere que, para obter o plug-in Java mais recente no Firefox, é possível seguir as instruções no site do Java e que é necessário o Java Linux integrado de qualquer variedade presente para executar o Java baixado, que, em seguida, depende de sua operação nos arquivos ao seu redor assim que o plug-in for ativado. Embora seja necessário um entendimento completo do código que compreende Java e Linux para realmente resolver seus mistérios, talvez esses experimentos sejam úteis para encontrar as razões pelas quais dois Java podem ser necessários neste caso. Pelo menos, é possível remover todo o Java também, se alguém achar útil fazê-lo.

Steve
fonte
2

O que faço nas novas máquinas Ubuntu 10.10 é

  • adicione java-6-sun,
  • remova o openJDK (adicione o sol Java primeiro, caso contrário, várias coisas serão removidas, como o tomcat, etc.)

Então tudo bem para mim, não há mais dependências openJDK

Bob Yoplait
fonte
java-6-sun não é o ubuntu-default-package, ou é?
Fabian Zeindl
2

As respostas dadas a esta pergunta não funcionaram para mim. Ou seja, o seguinte falhou:

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

Com o erro:

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

Tente estas instruções :

  1. Abra o Ubuntu Software Center .
  2. Pesquise por IcedTea.
  3. Remova o plug-in IcedTea Java ( icedtea-6-jre-cacao), se estiver instalado.
  4. Selecione OpenJDK Java 7 Runtime.
  5. Clique em instalar.
  6. Aguarde o download e a instalação do pacote de 41,6 MB.

O OpenJDK (IcedTea) está agora instalado, o que deve permitir que você (se você tiver esse erro) continue instalando o JDK do Oracle sem erros.

Veja também:

Dave Jarvis
fonte
1

Primeiro: remova o plugin openjdk e icedtea.

sudo apt-get remove openjdk* icedtea*

Segundo: copie o arquivo .bin jdk para / opt ou / usr / java e extraia-o.

sudo cp jdk_1.16.0.bin /usr/java

Terceiro: coloque um link do arquivo java em / 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

atualize as alternativas usando as alternativas de atualização

Crie um link simbólico para o Java Plugin no diretório de plugins do Firefox.

Crie um link simbólico para o arquivo libnpjp2.so do Java Plugin no diretório de plugins do Firefox:

   cd  

<Firefox>/plugins


 ln -s  

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

Espero que isto ajude.

Ubuntuser
fonte
Você não perdeu um passo depois do cp e antes de vincular? E: Você sugere a vinculação manual, mas existem 45 arquivos em java / bin, a maioria deles executável. Você gostaria de fazer 25 links simbólicos? Eu preferiria mudar o CAMINHO.
usuário desconhecido
Até onde eu sei, os passos estão corretos. você pode consultar o tutorial na página de instalação java da sun (oracle). os passos acima funcionaram para mim! deixe-me saber como você se dá.
Ubuntuser