我已经安装了 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
并且它有效吗?
答案1
中有一个帮助文本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_HOME
是tomcat
:
setenv.sh
如果文件夹CATALINA_BASE/bin
不存在,请创建一个名为的脚本。将此行添加到
setenv.sh
export JAVA_HOME=/opt/java/jdk1.8.0_05
使其可执行。
为什么应该使用此解决方案:
在脚本中设置环境变量更安全。始终尝试尽可能在本地设置变量。如果您真的需要,请尝试不要使用/etc/environment
,和其他变量。/etc/profile
不要需要Global Environment Variable
。设置JAVA_HOME
可setenv.sh
让您使用不同的 tomcat 来处理需要不同版本的 的不同应用程序java
,但由一个用户运行。其他用户环境不会受到您的影响。
答案2
由于您为自己的用户而不是超级用户设置了环境变量,因此您有两个选择:
您必须使用
-E
选项导出变量,如下所示:sudo -E /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh
请注意,这将在运行命令时导出所有环境变量。这不是首选,因为当您以 root 身份运行命令时,普通用户环境会被溢出。这是不可取的。
导出root文件中的变量.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
然后执行使用设置的环境变量的命令。
答案3
我正在寻找的解决方案是/etc/environment
,如环境变量,不处理脚本,也不扩展变量,因此添加以下内容(没有导出)起了作用:
JAVA_HOME=/opt/java/jdk1.8.0_05
然后我重新启动系统以使更改生效。
答案4
选择或尝试不同的JDK。
放$JAVA_HOME如上所述catalina.shintro 或其他 Tomcat 文档,并且不要更改除其中定义的环境变量(例如 Catalina Home/Base)之外的任何其他内容。然后运行以下命令;
sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javadoc
sudo update-alternatives --config javap
在每个服务器上,我都必须从 Java Development Kit/JDK 版本 11 切换到版本 8,以适应 tomcat 版本 8。我测试了两次,我确信这是解决方案(使用更新替代方案,依赖 Java 的程序知道在哪里可以找到 Java,因此您不必在 env vars 文件中重复此操作)。A 最初,我确实发现我的 shutdown.sh 脚本正在端口 8005 上寻找我的服务器,而它却在 8080 上启动(严重无法联系 localhost:8005。Tomcat 可能未运行。 或者连接被拒绝错误)。但服务器本身确实关闭了。我手动重新启动它,然后将其关闭,结果发现错误不再发生。
加入 tomcat 用户组,我想你会发现 Tomcat 本身就很麻烦。然后对自己要有耐心!
注意/注意事项:一次测试一个更改,并相应地更新其他更改。