isa*_*pir 17 bash java tomcat environment-variables
我已经安装了 Ubuntu 14.04 Server,提取了 JDK1.8u5 和 Tomcat7,并将以下内容添加到 .profile(我也尝试将其添加到 .bashrc 并具有类似的 [非] 结果):
export JAVA_HOME=/opt/java/jdk1.8.0_05
export PATH=$PATH:$JAVA_HOME/bin
Run Code Online (Sandbox Code Playgroud)
当我运行时,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
Run Code Online (Sandbox Code Playgroud)
但是...我刚试过echo $JAVA_HOME,它奏效了吗?
c0r*_*0rp 30
中有帮助文本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
Run Code Online (Sandbox Code Playgroud)
当您开始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
Run Code Online (Sandbox Code Playgroud)使其可执行。
在脚本中设置环境变量更安全。始终尝试尽可能在本地设置变量。尽量不要使用/etc/environment,/etc/profile和其他人,如果你真的没有需要Global Environment Variable。设置JAVA_HOMEinsetenv.sh使您能够将不同的 tomcat 与需要不同版本java但由一个用户运行的不同应用程序一起使用。其他用户环境不会受到您的影响。
由于您为自己的用户而不是超级用户设置了环境变量,因此您有两个选择:
您必须使用-E选项导出变量,如下所示:
sudo -E /opt/tomcat7/apache-tomcat-7.0.53/bin/startup.sh
Run Code Online (Sandbox Code Playgroud)
请注意,这将在运行命令时导出所有环境变量。这不是首选,因为当您以 root 身份运行命令时,普通用户环境会溢出。这是不可取的。
导出root .bashrc/etc/enviroment文件中的变量。打开终端并输入:
sudo nano /etc/environment
Run Code Online (Sandbox Code Playgroud)
并输入您的管理密码,并将以下几行添加到文件末尾:
JAVA_HOME=/opt/java/jdk1.8.0_05
PATH=$PATH:$JAVA_HOME/bin
Run Code Online (Sandbox Code Playgroud)
进而
source /etc/environment
Run Code Online (Sandbox Code Playgroud)
或重新启动您的机器,然后重试您正在使用的命令。
更新:
这个答案提供了两个提示,为什么第 2 步不起作用,sudo会重置环境并提供安全路径,因此所有全局变量都被重置。一种解决方法是使用
sudo su
Run Code Online (Sandbox Code Playgroud)
然后执行使用设置的环境变量的命令。