No Windows, JAVA_HOME
deve apontar para a pasta de instalação do JDK (para que JAVA_HOME/bin
contenha todos os executáveis e JAVA_HOME/libs
todas as jar
bibliotecas padrão ).
Se eu baixar o pacote JDK da Sun e instalá-lo no Linux, é o mesmo procedimento.
No entanto, preciso usar o pacote OpenJDK padrão do Kubuntu. O problema é que todos os executáveis são colocados em /usr/bin
. Mas os potes são colocados /usr/share/java
. Como eles não estão na mesma JAVA_HOME
pasta, estou tendo problemas com Grails e talvez haja problemas com outros aplicativos que esperam a estrutura Java padrão.
Se eu usar:
JAVA_HOME=/usr
Todos os aplicativos e scripts que desejam usar qualquer executável Java podem usar o procedimento padrão
call $JAVA_HOME/bin/executable
. No entanto, uma vez que os frascos estão em um lugar diferente, eles nem sempre são encontrados (exemplo: no grails Eu estou ficandoClassDefNotFound
paranative2ascii
).Por outro lado, se eu usar:
JAVA_HOME=/usr/share/java
Nenhum dos executáveis Java (
java
,javac
, etc.) pode ser encontrado.
Então, qual é a maneira correta de lidar com a JAVA_HOME
variável em um Linux baseado em Debian?
Obrigado pela sua ajuda, Luis
fonte
Se você usar alternativas para gerenciar várias versões de java, você pode definir o
JAVA_HOME
baseado no java (ou javac) com link simbólico como este:export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
fonte
/usr/bin/java
apontam para um script (/usr/libexec/eselect-java/run-java-tool.bash
). ainda assim, é uma boa abordagem. a única coisa que eu mudaria é usar a substituiçãosed
JAVA_HOME=$( j=$( readlink -f /usr/bin/java ) ; echo ${j%%/bin/java} )
javac
parajava
porque nem todo mundo tem o JDK instalado; apenas o JREA instalação padrão do Ubuntu parece incluir as várias versões do Java
/usr/lib/jvm
. Ojavac
java que você encontrar em seu caminho fará um softlink para isso.Não há problema em instalar sua própria versão do Java em qualquer lugar que desejar, desde que você defina a
JAVA_HOME
variável de ambiente e certifique-se de ter o novo Javabin
em seu caminho.Uma maneira simples de fazer isso é ter a casa do Java como um softlink, de modo que se você quiser atualizar ou trocar de versão, você só precisa mudar o diretório para o qual este aponta - por exemplo:
/usr/bin/java --> /opt/jdk/bin/java, /opt/jdk --> /opt/jdk1.6.011
fonte
Normalmente não tenho nenhuma variável de ambiente JAVA_HOME. Java pode configurá-lo sozinho. Dentro da propriedade de sistema java java.home deve estar disponível.
fonte
Tente definir também a variável JAVA_LIB.
fonte
Se você tiver problemas com os arquivos JAR não sendo encontrados, também asseguraria que seu CLASSPATH esteja configurado para incluir a localização desses arquivos. No entanto, acho que o CLASSPATH geralmente precisa ser definido de maneira diferente para programas diferentes e muitas vezes acaba sendo algo a ser definido exclusivamente para programas individuais.
fonte
A resposta atualizada que resolverá seu problema e também apenas um bom guia geral para instalar o Oracle Java 7 no Ubuntu pode ser encontrada aqui: http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux
fonte
Eu descobri problemas semelhantes com os pacotes openjdk-6-jre e openjdk-6-jre-headless no Ubuntu.
Meu problema foi resolvido purgando os pacotes openjdk-6-jre e openjdk-6-jre-headless e reinstalando. As alternativas são atualizadas apenas em uma nova instalação dos pacotes openjdk-6-jre e openjdk-6-jre-headless.
Abaixo está um exemplo de instalação após a purga:
aptitude purge openjdk-6-jre openjdk-6-jre-headless # to ensure no configuration exists aptitude install --without-recommends openjdk-6-jre # Installing without some extras Reading package lists... Done Building dependency tree Reading state information... Done Reading extended state information Initializing package states... Done The following NEW packages will be installed: ca-certificates-java{a} java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a} openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-java{a} The following packages are RECOMMENDED but will NOT be installed: icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra 0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded. Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used. Do you want to continue? [Y/n/?] Writing extended state information... Done Selecting previously deselected package openjdk-6-jre-lib. (Reading database ... 62267 files and directories currently installed.) Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ... ... Processing triggers for man-db ... Setting up tzdata-java (2012e-0ubuntu0.10.04) ... ... Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ... update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/java to provide /usr/bin/java (java) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/pack200 to provide /usr/bin/pack200 (pack200) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/rmid to provide /usr/bin/rmid (rmid) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/unpack200 to provide /usr/bin/unpack200 (unpack200) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/orbd to provide /usr/bin/orbd (orbd) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/servertool to provide /usr/bin/servertool (servertool) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/tnameserv to provide /usr/bin/tnameserv (tnameserv) in auto mode. update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode. Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ... update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/policytool to provide /usr/bin/policytool (policytool) in auto mode. ...
Você pode ver acima que
update-alternatives
é executado para configurar links para os vários binários Java.Após esta instalação, também existem links em
/usr/bin
, links em/etc/alternatives
e arquivos para cada binário em/var/lib/dpkg/alternatives
.ls -l /usr/bin/java /etc/alternatives/java /var/lib/dpkg/alternatives/java lrwxrwxrwx 1 root root 40 2013-01-16 14:44 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/java lrwxrwxrwx 1 root root 22 2013-01-16 14:44 /usr/bin/java -> /etc/alternatives/java -rw-r--r-- 1 root root 158 2013-01-16 14:44 /var/lib/dpkg/alternatives/java
Vamos comparar isso com a instalação sem purga.
aptitude remove openjdk-6-jre aptitude install --without-recommends openjdk-6-jre Reading package lists... Done Building dependency tree Reading state information... Done Reading extended state information Initializing package states... Done The following NEW packages will be installed: ca-certificates-java{a} java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a} openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-java{a} The following packages are RECOMMENDED but will NOT be installed: icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra 0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded. Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used. Do you want to continue? [Y/n/?] Writing extended state information... Done Selecting previously deselected package openjdk-6-jre-lib. (Reading database ... 62293 files and directories currently installed.) Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ... ... Processing triggers for man-db ... ... Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ... Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ... ...
Como você vê,
update-alternatives
não é acionado.Após esta instalação, não há arquivos para os binários Java em
/var/lib/dpkg/alternatives
, nenhum link em/etc/alternatives
e nenhum link em/usr/bin
.A remoção dos arquivos
/var/lib/dpkg/alternatives
também quebraupdate-java-alternatives
.fonte
Ubuntu 12.04 isso funciona ...
JAVA_HOME = / usr / lib / jvm / java-6-openjdk-i386 / jre
fonte
Como uma atualização para o usuário do fedora, as alternativas definem o diretório java atual para / usr / java / default
então você deve definir seu JAVA_HOME para / usr / java / default para sempre ter alternativas de seleção atual em seu classpath
HTH!
fonte
Eu sempre costumo definir o JAVA_HOME de acordo com o
/usr/bin/java
.JAVA_HOME="$(dirname -- "$(dirname -- "$(readlink -f /usr/bin/java)")")"
Dessa forma, ambas as alternativas apontam para o mesmo local
fonte
Pelo que me lembro, usei o script update-java-transactions em vez do update-alternativas. E configurou o JAVA_HOME para mim corretamente.
fonte
Por favor, veja o que o comando atualizar-alternativas faz (ele tem um bom homem ...).
Em breve - o que acontece quando você tem java-sun-1.4 e java-opensouce-1.0 ... qual leva "java"? Debian "/ usr / bin / java" é um link simbólico e "/usr/bin/java-sun-1.4" é uma alternativa para "/ usr / bin / java"
Edit: Como disse Richard,
update-alternatives
não é suficiente. Você realmente precisa usarupdate-java-alternatives
. Mais informações em:https://help.ubuntu.com/community/Java
fonte
Meu objetivo correto sempre foi fazer o download da Sun e apenas instalá-lo dessa forma. Então você sabe exatamente em qual diretório tudo vai.
Mas se você preferir continuar com a maneira estranha de instalação do Debian, meu melhor palpite seria o diretório pai logo acima de onde os binários java e javac estão localizados.
(já que quando você especifica em seu caminho é $ JAVA_HOME / bin) (então no seu caso seria ... $ JAVA_HOME / share e $ JAVA_HOME seria / usr?)
Eh, isso não parece certo ...
Também estou interessado em ouvir a resposta!
fonte