异常idea执行Main方法出现 Exception in thread "main" java.lang.NoClassDefFoundError: javax/servle(代

Posted N!CE波

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常idea执行Main方法出现 Exception in thread "main" java.lang.NoClassDefFoundError: javax/servle(代相关的知识,希望对你有一定的参考价值。

一、异常复现步骤

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内容)

 

以上是关于异常idea执行Main方法出现 Exception in thread "main" java.lang.NoClassDefFoundError: javax/servle(代的主要内容,如果未能解决你的问题,请参考以下文章

017 异常的处理

IKAnalyzer在idea配置运行出现 Main Dictionary not found!!!

解决idea提示中文 “GBK”异常

spring boot 项目使用idea正常打包后执行总是出现异常,解决办法

Main 中的 Giant Try Catch 块

idea maven聚合项目创建子项目出现异常?