Tomcat无法识别JAVA_HOME


15

我已经安装了Ubuntu 14.04 Server,提取了JDK1.8u5和Tomcat7,并将以下内容添加到.profile中(我也尝试将其添加到具有类似[非]结果的.bashrc中):

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

当我跑步时echo $JAVA_HOME,得到的预期结果/opt/java/jdk1.8.0_05。我还可以运行java -version并从Java获得正确的响应。到目前为止,一切都很好。

所以现在我尝试启动Tomcat(也尝试了catalina.sh),并且得到以下信息:

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

但是...我只是尝试过echo $JAVA_HOME并且成功了?

Answers:


23

中有帮助文本catalina.sh。我在这里引用它:

#   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

当您开始tomcat使用时catalina.sh,它将搜索文件setenv.sh并进行采购。它在CATALINA_HOME或中搜索CATALINA_BASE

所以更好的方式来设定JAVA_HOMEtomcat是:

  1. setenv.sh在文件夹中创建一个名为的脚本CATALINA_BASE/bin(如果尚不存在)。
  2. 将此行添加到 setenv.sh

    export JAVA_HOME=/opt/java/jdk1.8.0_05
  3. 使它可执行。


为什么要使用此解决方案:

在脚本中设置环境变量更安全。始终尝试尽可能在本地设置变量。尽量不要使用/etc/environment/etc/profile和其他人,如果你真的没有需要Global Environment Variable。设置使用JAVA_HOMEsetenv.sh,您便可以将不同的tomcat用于需要不同版本的不同应用程序java,但由一个用户运行。其他用户环境不会受到您的影响。


4

由于您为自己的用户而不是超级用户设置了环境变量,因此有两个选择:

  1. 您将必须使用-E选项导出变量,如下所示:

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

    请注意,这将在运行命令时导出所有环境变量。这不是首选,因为当您以root身份运行命令时,普通用户环境会溢出。这是不可取的。

  2. 将变量导出到.bashrc /etc/enviroment文件中。打开一个终端并输入:

    sudo nano /etc/environment

    并输入您的管理密码,并将以下行添加到文件末尾:

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

    接着

    source /etc/environment

    或重新启动计算机,然后重试您使用的命令。


更新:

该答案提供了两个步骤2为何无效,sudo重置环境并提供安全路径的提示,因此所有全局变量都将重置。一种解决方法是使用

sudo su

然后执行使用设置的环境变量的命令。


1
谢谢@Jobin-选项1起作用了,所以我投票给你答案。现在,我将检查选项2,这是我的首选解决方案,如果可行,我将接受您的回答。
isapir 2014年

/root/.bashrc正如您所建议的,我将命令添加到了nano上,但是调用user@ubuntu:~$ source /root/.bashrc结果-bash: /root/.bashrc: Permission denied并使用sudo yields进行尝试sudo: source: command not found。在这一点上重试原始命令让我回到0点
isapir

@Igal:编辑我的答案来解决这个问题,你应该先用sudo -i你面前source。感谢您指出了这一点。
Jobin 2014年

好的,请原谅新手的问题,但是sudo -i一旦我将其称为“来源” ,如何退出?没有退出,我得到的是原始错误消息...
isapir 2014年

@Igal:只需按Ctrl + d或输入exit
Jobin 2014年

0

我一直在寻找的解决方案是/etc/environment,如EnvironmentVariables所指定的,该解决方案不处理脚本并且不扩展变量,因此添加以下内容(导出)可以解决问题:

JAVA_HOME=/opt/java/jdk1.8.0_05

然后,我重新启动系统以使更改生效。


0

我在tomcat7.service脚本中添加了JAVA_HOME,因为setenv.sh它不是由catalina.sh

脚步:

1.打开tomcat7服务脚本文件

sudo gedit /etc/init.d/tomcat7

2.设置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.启动tomcat7服务

sudo service tomcat7 status

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.