Eclipse 抱怨找不到 "jakarta.servlet.http.HttpServlet"

Eclipse complains about "jakarta.servlet.http.HttpServlet" was not found

我正在选择一个有很多旧依赖项的旧项目。 我正在使用“Eclipse IDE for Enterprise Java and Web Developers”。 将源导入 Eclipse 后,Eclipse 抱怨我的所有 jsp 个文件

The superclass "jakarta.servlet.http.HttpServlet" was not found on the Java Build Path

在pom.xml中,我看到有这样的依赖:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.0.1</version>
  <scope>provided</scope>
</dependency>

我去 google 了解错误并阅读了一些 javax 与 jakarta 的历史。 问题是,因为这是一个仍在服务器上 运行 的旧项目...我可以坚持使用 javax 而不是 jakarta 吗?

在 Eclipse 的 Project Facets 下,我选中了“动态 Web 模块”,它在本地使用 Apache Tomcat v9.0。 在服务器设置下,我在 运行 这个项目的本地主机上有“Tomcat v9.0 服务器”。

另一件事我不知道它是否与我的 Tomcat 设置或项目设置有任何关系,即 pom.xml 上的设置,我收到关于丢失很多的错误工件,如“jini:jsk-lib:jar”、“jini:reggie:jar”、“jini:start:jar”等...

can I stick with javax and not jakarta?

是的,您当然可以坚持使用 javax. 命名而不是迁移到新的 jakarta. 命名空间。最终,您将希望进行迁移以从新技术和改进的技术中受益。但今年或明年没有必要。

阅读 Which version? 文档页面。您会看到版本 9.0.x 和 10.0.x 在功能上是等效的,是并行开发的。唯一显着的区别是上面讨论的名称空间更改。因此,如果您选择坚持使用 javax 命名,请使用 Tomcat 9。

您需要按顺序整理代码库,以便仅使用 javax. 命名。显然您有一些代码引用了新的 jakarta. 命名。解决这个问题。检查您的 import 语句。检查是否使用了 fully-qualified class 名称。使用 IDE 的搜索工具。

顺便说一下……如果使用 Tomcat 9,您可以将对 Servlet API 的依赖从 3.0.1 更改为 Servlet specification. See that Which version? page linked above, as well as the https://Jakarta.EE 站点的版本 4.0.3,了解 JSP 规范的适当版本等