Ubuntu 20.04下如何配置Tomcat 9使用Java 17运行?
解决Tomcat 9在Ubuntu 20.04中无法识别Java 17的问题
问题分析
Ubuntu 20.04通过apt安装的Tomcat 9,其systemd服务默认不会自动读取/usr/share/tomcat9/bin/setenv.sh,且文件权限不正确或系统默认Java版本未切换到17,都会导致Tomcat启动时提示找不到JDK/JRE。
解决步骤
1. 确认Java 17路径并设置为系统默认
先确认Java 17的安装路径:
update-alternatives --list java
输出示例:
/usr/lib/jvm/java-17-openjdk-amd64/bin/java
此时JAVA_HOME为路径去掉/bin/java的部分,即/usr/lib/jvm/java-17-openjdk-amd64。
设置系统默认Java版本为17:
sudo update-alternatives --config java
选择对应Java 17的选项编号,按回车确认。
2. 配置Tomcat的JAVA_HOME(二选一)
方式一:修改Tomcat全局配置(推荐)
编辑Tomcat的全局配置文件:
sudo nano /etc/tomcat9/tomcat.conf
在文件末尾添加:
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
保存退出后重启Tomcat:
sudo systemctl restart tomcat9
方式二:使用setenv.sh并配置权限
如果坚持使用setenv.sh,需确保文件位置和权限正确:
- 若
/usr/share/tomcat9/bin目录不存在,先创建:
sudo mkdir -p /usr/share/tomcat9/bin
- 创建
setenv.sh文件:
sudo nano /usr/share/tomcat9/bin/setenv.sh
写入内容:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
- 设置文件权限,让Tomcat用户可执行:
sudo chown tomcat:tomcat /usr/share/tomcat9/bin/setenv.sh sudo chmod +x /usr/share/tomcat9/bin/setenv.sh
- 修改systemd服务配置,让Tomcat加载该文件:
创建服务覆盖配置目录并编辑文件:
sudo mkdir -p /etc/systemd/system/tomcat9.service.d sudo nano /etc/systemd/system/tomcat9.service.d/override.conf
写入:
[Service] ExecStartPre=/usr/share/tomcat9/bin/setenv.sh
- 重新加载systemd配置并重启Tomcat:
sudo systemctl daemon-reload sudo systemctl restart tomcat9
3. 验证配置生效
查看Tomcat日志确认Java版本:
sudo tail -n 20 /var/log/tomcat9/catalina.out
日志中会显示Java 17的版本信息,说明配置成功。
内容的提问来源于stack exchange,提问作者zeroonezeroone
相关产品推荐
相关产品推荐

