我用Spring Boot 1.2.3开始了一个新项目.我收到了错误
java.lang.NoClassDefFoundError: javax/servlet/Filter
Run Code Online (Sandbox Code Playgroud)
Gradle依赖:
dependencies {
compile("org.springframework.boot:spring-boot-starter-actuator")
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.codehaus.groovy:groovy")
compile("com.h2database:h2")
compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity3")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
testCompile("org.springframework.boot:spring-boot-starter-test")
compile 'org.webjars:jquery:2.1.4'
compile 'org.webjars:bootstrap:3.3.4'
}
Run Code Online (Sandbox Code Playgroud)
这是完整的堆栈跟踪
Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/Filter
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2570)
at java.lang.Class.getMethod0(Class.java:2813)
at java.lang.Class.getMethod(Class.java:1663)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:125)
Caused by: java.lang.ClassNotFoundException: javax.servlet.Filter
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 29 more
Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)
Dr.*_*gos 126
对于maven用户,请注释以下依赖项中提供的作用域:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--<scope>provided</scope>-->
</dependency>
Run Code Online (Sandbox Code Playgroud)
UPDATE
正如feed.me所提到的,您必须取消注释所提供的部分,具体取决于您正在部署的应用程序类型.
这是一个有用的链接,其中包含详细信息:http: //docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging
Jai*_*o99 30
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
Run Code Online (Sandbox Code Playgroud)
这应该是
compile("org.springframework.boot:spring-boot-starter-tomcat")
Run Code Online (Sandbox Code Playgroud)
Tim*_*nov 19
这是IDE的有趣之处(在这种情况下为IntelliJ):
如果采用默认值,即不申报 弹簧引导起动的tomcat作为提供,一个弹簧启动了Maven插件(SBMP)把Tomcat的jar文件到你的战争- >你可能会得到错误部署这场战争容器(可能存在版本冲突)
不然你会与类路径没有编译依赖于Tomcat的嵌入(SBMP将建立可执行的战争/罐子提供DEPS包含的反正)
有一些棘手的解决方法:通过UI将tomcat的jar放到你想法模块的类路径中:File->Project Structure->(Libraries or Modules/Dependencies tab)
.
maven
案例解决方案不要在Idea中添加模块依赖项,最好使用spring-boot-starter-tomcat lib的编译范围声明maven配置文件.
<profiles>
<profile>
<id>embed-tomcat</id>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
而spring-boot-starter-tomcat
被宣布提供的<dependencies/>
,使得激活该配置文件在IDE让你打造推出带有嵌入式的Tomcat.
Gan*_*rat 17
就我而言,该依赖项的范围是provided
.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
所以,我遇到了同样的问题。 引起原因:java.lang.ClassNotFoundException:javax.servlet.Filter
我必须在 Intellij 中启用以下选项
Add dependencies with "provided" scope to classpath
您将看到以下选项已启用,
或者
您可以将以下属性添加到.intellij/workspace.xml
应用程序配置部分下的文件中。
<option name="INCLUDE_PROVIDED_SCOPE" value="true" />
例如,
<component name="RunManager" selected="Application.DemoApp">
<configuration name="DemoApp" type="Application" factoryName="Application">
<option name="INCLUDE_PROVIDED_SCOPE" value="true" /> ```
Run Code Online (Sandbox Code Playgroud)
添加以下依赖项。范围应该被编译然后它会工作。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
小智 7
对于罐子
添加pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
看起来您尝试将库添加servlet.jar
到servlet-api.jar
项目/lib/
文件夹中,但 Tomcat 已经应该为您提供这些库。从您的项目和类路径中删除它们。在项目或类路径中的任何位置搜索并将其删除。
归档时间: |
|
查看次数: |
97044 次 |
最近记录: |