簡體   English   中英

java:無法訪問 javax.servlet.ServletException class 文件,找不到 javax.servlet.ServletException

[英]java: cannot access javax.servlet.ServletException class file for javax.servlet.ServletException not found

描述

當我開發我的 java 項目時,我使用:
Java version: 1.8
Apache Tomcat version 9.0.x

然后,我使用Tomcat 10.0.x運行我的項目(在我的項目中進行了少量修改)。 我不得不將javax package 相關導入更改為jakarta package 導入。

當我構建項目時,出現以下錯誤;

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. 為什么我遷移到 Tomcat 10 時必須包含Java Servlet API依賴項?
  2. 我確實包含Java Servlet API依賴項,但這是一個正確的解決方案嗎?

為什么我遷移到 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 依賴樹插件來嘗試識別您的哪些應用程序依賴項依賴於舊的javax.servlet API。 尋找那些使用jakarta.servlet的依賴項的更新版本。

如果 2 和 3 不能確定罪魁禍首,那就很難了。 您可能需要解壓縮所有相關的 JAR 文件並使用javapgrep “分析”它們。 或者可能有更好的方法。

如果您能夠識別依賴項,但找不到與 Jakarta 兼容的版本,那么您遇到了另一種問題。 您必須在努力移植依賴項、尋找另一個庫(或其他庫)來提供功能或從 web 應用程序中刪除功能之間做出選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM