【異常】idea執行Main方法出現 Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest


一、異常復現步驟

1)首先得是一個Spring MVC項目

注:Spring Boot項目有內置的web 容器,不會出現該問題

 

2)main方法存在於使用HttpServletRequest類的類中

 

3)項目POM中引入有javax.servlet-api坐標或沒有

 <!-- Servlet -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>

 

4)執行Main方法出現以下異常

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpServletRequest
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

 

 

二、異常分析和解決方法

1)出現該異常的原因:就是找不到HttpServletRequest類,及javax.servlet-apipom坐標沒引入或scope作用域問題

* compile,缺省值,適用於所有階段,會隨着項目一起發布。 
* provided,類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar。即已提供范圍的依賴在編譯classpath (不是運行時)可用
* runtime,只在運行時使用,如JDBC驅動,適用運行和測試階段。 
* test,只在測試時使用,用於編譯和運行測試代碼。不會隨項目發布。 
* system,類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查找它。

如上解釋,scope需要時compile

 

2)解決方案就是修改scope作用域

1.直接修改pom文件的

  <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>compile</scope>
            </dependency>

 

2.修改idea中的(推薦,該方法不會改變pom內容)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM