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?

isapir
fonte

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ê.

c0rp
fonte
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.

jobin
fonte
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.

isapir
fonte
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

CᴴᴀZ
fonte