O Tomcat não reconhece JAVA_HOME


15

Instalei o Ubuntu 14.04 Server, extraí o JDK1.8u5 e o Tomcat7 e adicionei o seguinte ao .profile (também tentei adicioná-lo ao .bashrc com resultados [não]] semelhantes:

export JAVA_HOME=/opt/java/jdk1.8.0_05
export PATH=$PATH:$JAVA_HOME/bin

quando corro echo $JAVA_HOME, obtenho o resultado esperado de /opt/java/jdk1.8.0_05. Também posso executar java -versione obter a resposta correta do Java. Por enquanto, tudo bem.

então agora eu tento inicializar o Tomcat (tentei também catalina.sh) e recebo o seguinte:

user@ubuntu:~$ sudo /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program

mas ... eu apenas tentei echo $JAVA_HOMEe funcionou?

Respostas:


23

Há um texto de ajuda em catalina.sh. Vou citar aqui:

#   Do not set the variables in this script. Instead put them into a script
#   setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" argument.

# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare case when it is needed.
CLASSPATH=

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi

Quando você começa a tomcatusar catalina.sh, ele procura pelo arquivo setenv.she o fornece . Está pesquisando em CATALINA_HOMEou CATALINA_BASE.

Portanto, a melhor maneira de definir JAVA_HOMEo seguinte tomcaté:

  1. Crie um script nomeado setenv.shna pasta CATALINA_BASE/bin, se ele ainda não existir.
  2. Adicione esta linha a setenv.sh

    export JAVA_HOME=/opt/java/jdk1.8.0_05
  3. Torne executável.


Por que você deve usar esta solução:

Definir variável de ambiente no script é mais seguro. Sempre tente definir variáveis ​​o mais local possível. Tente não usar /etc/environment, /etc/profilee outros, se você realmente não precisa Global Environment Variable. Definir JAVA_HOMEem setenv.shdá-lhe capacidade de usar diferentes tomcats com diferentes aplicações que necessitam de versão diferente java, mas correndo por um usuário. Outro ambiente de usuário não seria afetado por você.


4

Como você definiu a variável de ambiente para seu próprio usuário e não para o superusuário, você tem duas opções:

  1. Você precisará exportar a variável usando a -Eopção da seguinte maneira:

    sudo -E /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh

    Observe que isso exportará todas as variáveis ​​de ambiente durante a execução do comando. Isso não é preferido, pois o ambiente normal dos usuários é derramado quando você executa o comando como root. Isto não é desejável.

  2. Exporte a variável no arquivo raiz.bashrc /etc/enviroment . Abra um terminal e digite:

    sudo nano /etc/environment

    e insira sua senha administrativa e adicione as seguintes linhas ao final do arquivo:

    JAVA_HOME=/opt/java/jdk1.8.0_05
    PATH=$PATH:$JAVA_HOME/bin

    e depois

    source /etc/environment

    ou reinicie sua máquina e tente novamente o comando que estava usando.


Atualizar:

Esta resposta forneceu dicas de como o passo 2 não funcionaria, sudoredefiniria o ambiente e forneceria um caminho seguro, para que todas as variáveis ​​globais sejam redefinidas. Uma solução alternativa seria usar

sudo su

e, em seguida, execute o comando que usa as variáveis ​​de ambiente definidas.


1
Obrigado @Jobin - a opção 1 funciona, então eu votei na sua resposta. Vou agora verificar a opção 2, que é minha solução preferida, e se funcionar, aceitarei sua resposta.
Isapir

Adicionei os comandos no /root/.bashrcnano, como você sugeriu, mas chamar user@ubuntu:~$ source /root/.bashrcresultados -bash: /root/.bashrc: Permission deniede experimentá-lo com o sudo yield sudo: source: command not found. repetindo o comando originais neste momento me traz de volta para o ponto 0.
isapir

@Igal: Editou minha resposta para resolver esse problema, você deve primeiro usar sudo -iantes de você source. Obrigado por apontar isso.
Jobin

ok, perdoe as perguntas do novato, mas como eu sudo -isaio da fonte de uma vez chamada? sem sair Eu estou recebendo a mensagem de erro original ...
isapir

@Igal: Basta pressionar Ctrl + d ou digite exit.
jobin

0

A solução que eu estava procurando é aquela em /etc/environmentque, conforme especificado em EnvironmentVariables , não processa scripts e não expande variáveis, portanto, adicionar o seguinte ( sem exportação) fez o truque:

JAVA_HOME=/opt/java/jdk1.8.0_05

Reiniciei o sistema para que as alterações entrassem em vigor.


0

Adicionei JAVA_HOME no tomcat7.servicescript, pois setenv.shnão foi obtido porcatalina.sh

Passos:

1.Abra o arquivo de script de serviço tomcat7

sudo gedit /etc/init.d/tomcat7

2.Configure JAVA_HOME

.
.
.
JAVA_HOME=/usr/lib/jvm/java-8-oracle

# Directory where the Tomcat 6 binary distribution resides
CATALINA_HOME=/usr/share/$NAME

# Directory for per-instance configuration files and webapps
CATALINA_BASE=/var/lib/$NAME

# Use the Java security manager? (yes/no)
TOMCAT7_SECURITY=no

3.Inicie o serviço tomcat7

sudo service tomcat7 status

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.