【问题标题】:java: cannot access javax.servlet.ServletException class file for javax.servlet.ServletException not foundjava: 无法访问 javax.servlet.ServletException 类文件,因为找不到 javax.servlet.ServletException
【发布时间】:2022-01-20 07:44:52
【问题描述】:

说明

当我开发我的 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

修复

当我搜索修复时,我发现我需要在我的 pom.xml 文件中包含 Java Servlet API 依赖项。这样我就可以成功构建项目了。

<!-- 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>

问题

  1. 为什么我必须包含 Java Servlet API 依赖项当我 迁移到 Tomcat 10 吗?
  2. 我确实包含了Java Servlet API 依赖项, 但这是正确的解决方法吗?

【问题讨论】:

标签: java tomcat java-8 tomcat9 tomcat10


【解决方案1】:

为什么我在迁移到 Tomcat 10 时必须包含 Java Servlet API 依赖项?

大概是因为您的应用程序依赖于符合 JSP 4.0.x 规范的东西。

我确实包含了 Java Servlet API 依赖项,但这是一个正确的解决方法吗?

不,这不是正确的解决方法。虽然您已成功构建您的应用程序,但在部署到 Tomcat 10 时大多数情况下都会遇到类加载器错误。这是因为 Tomcat 10 运行时库不提供 javax.servlet.* 类。

正确的方法是确定您的应用程序或其依赖项为何尝试使用 javax.servlet 中的类...并消除这种情况。

  1. 删除 javax.servlet / javax.servlet-api / 4.0.1 依赖项。

  2. 在您的应用程序代码库中搜索对 javax.servlet 的任何剩余引用并更改它们。

  3. 使用Maven dependency tree plugin 尝试确定您的哪些应用程序依赖项依赖于旧的javax.servlet API。寻找那些使用 jakarta.servlet 的依赖项的更新版本。

如果 2 和 3 不能确定罪魁祸首,那就很难了。您可能需要解压缩所有相关 JAR 文件并使用 javapgrep “分析”它们。或者可能有更好的方法。

如果您能够识别依赖项,但找不到与 Jakarta 兼容的版本,那么您遇到了另一种问题。您必须在努力移植依赖项、寻找另一个库(或其他)来提供该功能或从您的 Web 应用程序中删除该功能之间做出选择。

【讨论】:

    猜你喜欢
    • 2015-08-27
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2023-03-28
    • 2019-03-11
    • 2022-12-14
    相关资源
    最近更新 更多