Arch Linux。 Servlet显然与openjdk有兼容性问题,所以我卸载了它,并从AUR安装了普通的jdk / jre。
# /etc/rc.d/tomcat7 restart :: Stopping tomcat7 daemon [FAIL] :: Starting tomcat7 daemon [BUSY] Cannot locate Java Home
添加了export TOMCAT_JAVA_HOME=/opt/java到/etc/profile.d/jdk.sh (和jdk.csh下的等价物),重新启动。 echo $JAVA_HOME和echo $TOMCAT_JAVA_HOME都返回/opt/java ,但仍然没有骰子。 为什么?
我在这个页面之后解决了这个问题: https : //bugs.archlinux.org/task/24126
基本上你必须在你的/etc/rc.d/tomcat7文件中添加这些行,在“./etc/conf.d/${daemon_name}”的下面。
# The JAVA_HOME of the JVM for Tomcat to use if [ -x /usr/lib/jvm/java-6-openjdk ]; then TOMCAT_JAVA_HOME=/usr/lib/jvm/java-6-openjdk elif [ -x /opt/java/ ]; then TOMCAT_JAVA_HOME=/opt/java/ fi # Tomcat additional commandline options CATALINA_OPTS=
希望这可以帮助。
你需要尝试做:
sudo env
根本不应该被允许以“我们”的方式来看待环境。
Sudoers手册有这个说…
由于环境variables会影响程序行为,因此sudoers提供了一种手段来限制要运行的命令inheritance用户环境中的哪些variables。
…和…
默认情况下,启用env_reset选项。 这使得除了env_check和env_keep选项所允许的调用过程中的variables之外,还使用包含TERM,PATH,HOME,MAIL,SHELL,LOGNAME,USER,USERNAME和SUDO_variables的最小环境来执行命令。
我的解决scheme是:
# Create a sudoers extension file and authorize passing JAVA_HOME, M2_HOME, etc into new environment cd ~/ rm -f neededBy* echo 'Defaults env_keep+="JAVA_HOME M2_HOME CATALINA_HOME TOMCAT_USER"' > neededByTomCat chmod 0440 neededByTomCat sudo cp neededByTomCat /etc/sudoers.d/
我希望这有帮助,
哈桑
在控制台中input“javac”可以得到什么吗? 这会告诉你是否安装了JDK,而不仅仅是JRE。 另外,input命令“which java”来查看你的java链接到哪里。 我从来不使用ArchLinux,但在Ubuntu和Mint上,他们使用alternatives链接系统来链接默认的Java安装…在这种情况下,我使用一个名为“galternatives”的工具来configurationOracle Java。
我不认为Arch Linux使用像Ubuntu这样的替代系统,但是好像在你的.bashrc中将PAT添加到PATH环境variables中,将会是一种不必要的编辑JAVA_HOME和CATALINA_HOME envvariables的方式tomcat脚本(因为脚本应该能够自动确定那些基于java二进制文件的位置)。
打开catalina.sh并在第一行代码之前添加以下行(但是在shebang之下的ofc)
JAVA_HOME=/opt/java JRE_HOME=/opt/java/jre
调整path以适应您的需求。 没有必要操纵任何PATH或持久variables的Tomcat正常工作。