![Tomcat 7:“无法找到 Java Home”](https://linux22.com/image/571132/Tomcat%207%EF%BC%9A%E2%80%9C%E6%97%A0%E6%B3%95%E6%89%BE%E5%88%B0%20Java%20Home%E2%80%9D.png)
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
,但仍然没有骰子。为什么?
答案1
我按照这个页面解决了这个问题: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=
希望这可以帮助。
答案2
您需要尝试执行以下操作:
sudo env
绝不能让 root 以“我们”的方式看待环境。
这Sudoers 手册有话要说...
由于环境变量可以影响程序行为,sudoers 提供了一种方法来限制要运行的命令从用户环境中继承哪些变量。
... 和 ...
默认情况下,env_reset 选项处于启用状态。这会导致命令在包含 TERM、PATH、HOME、MAIL、SHELL、LOGNAME、USER、USERNAME 和 SUDO_ 变量的最小环境中执行,此外还包含 env_check 和 env_keep 选项允许的调用进程的变量。
我的解决方案是:
# 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/
我希望这有帮助,
哈桑
答案3
在控制台中输入“javac”会得到什么结果吗?它会告诉你是否安装了 JDK 而不仅仅是 JRE。此外,输入命令“which java”可以查看你的 java 链接到哪里。我从不使用 ArchLinux,但在 Ubuntu 和 Mint 上,他们使用替代链接系统来链接默认的 Java 安装……在这种情况下,我在安装 Oracle Java 后使用一个名为“galternatives”的工具来配置它。
我不认为 Arch Linux 像 Ubuntu 那样使用替代系统,但似乎在 .bashrc 中的 PATH 环境变量中添加 java 是可行的方法,而不是不必要地编辑 tomcat 脚本中的 JAVA_HOME 和 CATALINA_HOME 环境变量(因为脚本应该能够根据 java 二进制文件的位置自动确定这些变量)。
答案4
打开catalina.sh
并在第一行代码之前添加以下几行(但当然在 shebang 下方)
JAVA_HOME=/opt/java
JRE_HOME=/opt/java/jre
调整路径以满足您的需要。无需操作任何 PATH 或持久变量即可使 Tomcat 正常工作。