当我开发我的java项目时,我使用:
Java version: 1.8
,Apache Tomcat version 9.0.x
然后,我使用
Tomcat 10.0.x
来运行我的项目(对我的项目进行了很少的修改)。我必须将 javax
包相关导入更改为 jakarta
包导入。
当我构建项目时,出现以下错误;
java: cannot access javax.servlet.ServletException
class file for javax.servlet.ServletException not found
当我搜索修复程序时,我发现我需要在我的
Java Servlet API
文件中包含 pom.xml
依赖项。这样我就可以成功构建项目了。
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
Java Servlet API
可能是因为您的应用程序依赖于符合 JSP 4.0.x 规范的内容。
我确实包含了 Java Servlet API 依赖项,但这是一个正确的修复吗?
不,这不是正确的解决方法。 虽然您已成功构建应用程序,但在部署到 Tomcat 10 时,您大多数会遇到类加载器错误。这是因为 Tomcat 10 运行时库不提供
Java Servlet API
类。
正确的方法是确定您的应用程序或其依赖项为何尝试使用javax.servlet.*
中的类...并消除这种情况。
javax.servlet
/
javax.servlet
/ javax.servlet-api
依赖项。
4.0.1
的任何剩余引用 ... 并更改它们。
尝试确定哪些应用程序依赖项依赖于旧的 javax.servlet
API。 寻找那些使用
javax.servlet
的依赖项的新版本。
jakarta.servlet
和
javap
“分析”它们。 或者可能有更好的方法。如果您能够识别依赖项,但找不到与 Jakarta 兼容的版本,那么您会遇到另一种问题。 您必须选择是努力移植依赖项、寻找另一个库(或其他库)来提供该功能,还是从您的 Web 应用程序中删除该功能。
grep