正如标题所述,在Ubuntu 20.04中,如何将Tomcat 9设置为使用Java 17?

最近,我用需要运行Java 17的Spring Boot 3.0.1重新打包了我的Web项目的war文件,试图将其部署到Ubuntu 20.04服务器上的Tomcat 9容器中.

看来,最好的办法是利用这setenv.sh美元.

我查了一些文件, 在/usr/share/tomcat9创建了一个文件夹bin,触及了setenv.sh的文件, 用JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64编辑它的内容.

然后运行sudo systemctl start tomcat9,但失败了. sudo systemctl status tomcat9表示"找不到JDK或JRE-请设置JAVA_HOME变量或安装DEFAULT-JDK程序包",

安装了openjdk-17-jre-headless个,首先移除了openjdk-11-jre-headless个.Tomcat9和JRE17都是由apt包管理器安装的.

推荐答案

即使你设法在java 17版上运行Tomcat 9,使用spring boot 3.xspring framework 6.x版的网络应用程序也不能在那里运行.

原因是从Spring Boot 3.0或Spring Framework6.0开始,Web应用程序需要符合Jakarta Servlet API.根据Tomcat的doc版本,从tomcat 10开始支持Jakarta Servlet API(Servlet V5.0).

如文档中所述

apache Tomcat 10.0.x

apache Tomcat 10.0.x builds on Tomcat 9.0.x and implements the Servlet 5.0, JSP 3.0, EL 4.0, WebSocket 2.0 and Authentication 2.0 specifications (the versions required by Jakarta EE 9 platform).

因此,您必须使用Tomcat 10而不是Tomcat 9.

Linux相关问答推荐

我使用Windows 10,但我无法在我的WSL2上下载vscode

在Zenity进度窗口上单击取消后如何停止bash脚本

Perl/cpan: 找不到 JSON/Parse.pm @INC

替换前 3 个字符范围内的所有整数

使用 sed 命令仅打印正则表达式匹配

从 curl 命令输出中获取值

使用 sed 或 awk 在 linux 中将第一行中的一个单词替换为第二行中的另一个单词

访问证书里面的图片

如何在ubuntu中通过.sh文件启动多个服务

有什么方法可以知道在发送之前将在 TCP 上发送多少字节?

sig_atomic_t 实际上是如何工作的?

根据外部请求在 Netbeans 中启动 XDebug

为什么在 find 命令中使用 dirname 会 for each 匹配项提供点?

如何有效地使用 grep?

Linux中没有X.org的OpenGL

为什么 Linux 不通过 TSS 使用硬件上下文切换?

grep 时间命令输出

如何从 linux 的命令行将 Sublime Text 2 文件打开到选项卡,而不是新窗口

如何在 Linux 上传递带感叹号的参数?

从文本文件中删除奇数行或偶数行