Tomcat no reconoce JAVA_HOME

15

Instalé Ubuntu 14.04 Server, extraje JDK1.8u5 y Tomcat7, y agregué lo siguiente a .profile (también intenté agregarlo a .bashrc con resultados similares [no-]):

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

cuando corro echo $JAVA_HOMEobtengo el resultado esperado de /opt/java/jdk1.8.0_05. También puedo ejecutar java -versiony obtener la respuesta correcta de Java. Hasta aquí todo bien.

así que ahora intento iniciar Tomcat (también probé catalina.sh), y obtengo lo siguiente:

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

pero ... ¿acabo de intentarlo echo $JAVA_HOMEy funcionó?

isapir
fuente

Respuestas:

23

Hay un texto de ayuda en catalina.sh. Lo citaré aquí:

#   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

Al iniciar tomcatel uso catalina.sh, es la búsqueda de archivos setenv.shy abastecimiento de la misma. Está buscando en CATALINA_HOMEo CATALINA_BASE.

Así que la mejor manera de conjunto JAVA_HOMEpara el tomcatque es:

  1. Cree un script nombrado setenv.shen la carpeta CATALINA_BASE/bin, si aún no existe.
  2. Agregue esta línea a setenv.sh

    export JAVA_HOME=/opt/java/jdk1.8.0_05
  3. Hazlo ejecutable.


Por qué deberías usar esta solución:

Establecer la variable de entorno en el script es más seguro. Siempre trate de establecer variables lo más localmente posible. Intente no usar /etc/environment, /etc/profiley otros si realmente no lo necesita Global Environment Variable. Ajuste JAVA_HOMEen setenv.shle da capacidad de utilizar diferentes gatos machos con diferentes aplicaciones que necesitan versión diferente de java, pero corriendo por un usuario. Otro entorno de usuario no se vería afectado por usted.

c0rp
fuente
4

Como ha establecido la variable de entorno para su propio usuario y no para el superusuario, tiene dos opciones:

  1. Tendrá que exportar la variable utilizando la -Eopción de la siguiente manera:

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

    Tenga en cuenta que esto exportará todas las variables de entorno mientras ejecuta el comando. Esto no es preferible ya que el entorno de usuarios normal se derrama cuando ejecuta el comando como root. Esto no es deseable.

  2. Exportar la variable en el.bashrc /etc/enviroment archivo raíz . Abra una terminal y escriba:

    sudo nano /etc/environment

    e ingrese su contraseña administrativa, y agregue las siguientes líneas al final del archivo:

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

    y entonces

    source /etc/environment

    o reinicie su máquina y luego vuelva a intentar el comando que estaba usando.


Actualizar:

Esta respuesta proporcionó pistas como dos por qué el paso 2 no funcionaría, sudo restablecería el entorno y proporcionaría una ruta segura, por lo que se restablecen todas las variables globales. Una solución alternativa sería usar

sudo su

y luego ejecute el comando que usa las variables de entorno establecidas.

Jobin
fuente
1
Gracias @Jobin: la opción 1 funciona, así que voté tu respuesta. Ahora comprobaré la opción 2, que es mi solución preferida, y si funciona, aceptaré su respuesta.
isapir
Agregué los comandos a /root/.bashrccon nano, como sugirió, pero al llamar user@ubuntu:~$ source /root/.bashrcresultados -bash: /root/.bashrc: Permission deniedy probarlo con sudo produce sudo: source: command not found. reintentar el comando original en este punto me lleva de vuelta al punto 0.
isapir
@Igal: Edité mi respuesta para resolver ese problema, primero debe usar sudo -iantes que usted source. Gracias por señalar eso.
jobin
ok, perdona las preguntas de los novatos, pero ¿cómo salgo sudo -iuna vez que he llamado a la fuente? sin salir de Recibo el mensaje de error original ...
isapir
@Igal: simplemente presione Ctrl + do escriba exit.
trabajo en
0

La solución que estaba buscando es en la /etc/environmentque, como se especifica en EnvironmentVariables , no procesa los scripts y no expande las variables, por lo que agregar lo siguiente ( sin exportación) fue el truco:

JAVA_HOME=/opt/java/jdk1.8.0_05

Luego reinicié el sistema para que los cambios surtan efecto.

isapir
fuente
0

Agregué JAVA_HOME en el tomcat7.servicescript ya que setenv.shno fue obtenido porcatalina.sh

Pasos:

1.Abra el archivo de script de servicio tomcat7

sudo gedit /etc/init.d/tomcat7

2.Configura 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 el servicio tomcat7

sudo service tomcat7 status

CᴴᴀZ
fuente