Tomcat não reconhece JAVA_HOME

14

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 [non-] semelhantes):

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

quando executo echo $JAVA_HOME , obtenho o resultado esperado de /opt/java/jdk1.8.0_05 . Eu também posso executar java -version e obter a resposta correta do Java. até aí tudo bem.

então agora eu tento iniciar o Tomcat (tentei também o 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 tentei echo $JAVA_HOME e funcionou?

    
por isapir 18.05.2014 / 19:45

3 respostas

17

Existe 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ê inicia tomcat usando catalina.sh , ele procura pelo arquivo setenv.sh e procura . Está pesquisando em CATALINA_HOME ou CATALINA_BASE .

Então, a melhor maneira de definir JAVA_HOME para o tomcat é:

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

    export JAVA_HOME=/opt/java/jdk1.8.0_05
    
  3. Torne-o 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 localmente possível. Tente não usar /etc/environment , /etc/profile e outros se você realmente não precisar de Global Environment Variable . A configuração de JAVA_HOME in setenv.sh permite usar diferentes tomcats com diferentes aplicativos que precisam de versões diferentes de java , mas executados por um usuário. Outro ambiente de usuário não seria afetado por você.

    
por c0rp 18.05.2014 / 20:41
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ê terá que exportar a variável usando a opção -E da seguinte forma:

    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 é o preferido, pois o ambiente normal dos usuários é derramado quando você executa o comando como root. Isso não é desejável.

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

    sudo nano /etc/environment
    

    , 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 você estava usando.

Atualização:

Esta resposta forneceu dicas como duas porque o passo 2 não funcionaria, sudo redefiniria 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 execute o comando que usa as variáveis de ambiente definidas.

    
por jobin 18.05.2014 / 19:53
0

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

JAVA_HOME=/opt/java/jdk1.8.0_05

Em seguida, reiniciei o sistema para que as alterações tivessem efeito.

    
por isapir 19.05.2014 / 00:59