ClassNotFoundException:ContextLoaderListener,当使用带有 maven tomcat8 插件和 PostResources 的 Intellij 时
ClassNotFoundException: ContextLoaderListener, when using Intellij with maven tomcat8 plugin and PostResources
我正在使用带有 Maven tomcat8 插件的 Intellij。我在我的上下文文件中添加了一个 PostResource:
<Resources className="org.apache.catalina.webresources.StandardRoot">
<PostResources base="{my_post_resources_path}}"
className="org.apache.catalina.webresources.JarResourceSet"
internalPath="/post-resources"
webAppMount="/WEB-INF/classes/post-resources"/>
</Resources>
正在取货,没问题。当我从命令行执行 mvn tomcat8:run 时,它工作得很好。但是当我从 Intellij 中 运行 它时,从 Maven 侧边栏中,通过右键单击 tomcat8 插件,然后 tomcat8:run,我得到这个错误:
SEVERE: Error configuring application listener of class
org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
SEVERE: Error configuring application listener of class
org.springframework.web.context.request.RequestContextListener
java.lang.ClassNotFoundException: org.springframework.web.context.request.RequestContextListener
我意识到这两个 类 都可以在 spring-web 中找到,我在我的 pom 中将其作为依赖项:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.26.RELEASE</version>
</dependency>
我已经确认在我的项目的 target/war/WEB-INF/lib 目录中,spring-web jar 就在那里。我已经看到很多 post 关于通过手动将 jars 添加到部署中来使它与 Eclipse 一起工作。我已经看到你可以在 Intellij 中做类似的事情,在文件 -> 项目结构 -> 工件中,但是看不到在哪里添加依赖项,而且我认为这无论如何都行不通。有人在 post 上说要添加 spring-context-support 作为依赖项,我做到了。结果相同。
我已经关闭并回复了 Intellij 很多次,运行 并重新运行 mvn clean install ...没有任何东西可以使 tomcat 从 Intellij 中正常启动。有什么想法吗?
更新:我发现从命令行 运行ning 时也会发生这种情况,所以这不是 Intellij 的事情。这似乎与我使用 web.xml 而不是 Java 配置有关。我的理解是应该与 web.xml.
一起使用
在我的web.xml中我定义了:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
如果我将它们注释掉,错误就会消失。但是当然,应用程序不会启动,因为没有 ContextLoaderListener。 :(
问题出在 tomcat8-maven-plugin 的配置上,我缺少 warSourceDirectory。
<configuration>
<port>8080</port>
<path>/myapp</path>
<addContextWarDependencies>true</addContextWarDependencies>
<contextFile>${project.build.outputDirectory}/myapp.xml</contextFile>
<warSourceDirectory>${project.build.directory}/${project.build.finalName}</warSourceDirectory>
</configuration>
我正在使用带有 Maven tomcat8 插件的 Intellij。我在我的上下文文件中添加了一个 PostResource:
<Resources className="org.apache.catalina.webresources.StandardRoot">
<PostResources base="{my_post_resources_path}}"
className="org.apache.catalina.webresources.JarResourceSet"
internalPath="/post-resources"
webAppMount="/WEB-INF/classes/post-resources"/>
</Resources>
正在取货,没问题。当我从命令行执行 mvn tomcat8:run 时,它工作得很好。但是当我从 Intellij 中 运行 它时,从 Maven 侧边栏中,通过右键单击 tomcat8 插件,然后 tomcat8:run,我得到这个错误:
SEVERE: Error configuring application listener of class
org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
SEVERE: Error configuring application listener of class
org.springframework.web.context.request.RequestContextListener
java.lang.ClassNotFoundException: org.springframework.web.context.request.RequestContextListener
我意识到这两个 类 都可以在 spring-web 中找到,我在我的 pom 中将其作为依赖项:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.26.RELEASE</version>
</dependency>
我已经确认在我的项目的 target/war/WEB-INF/lib 目录中,spring-web jar 就在那里。我已经看到很多 post 关于通过手动将 jars 添加到部署中来使它与 Eclipse 一起工作。我已经看到你可以在 Intellij 中做类似的事情,在文件 -> 项目结构 -> 工件中,但是看不到在哪里添加依赖项,而且我认为这无论如何都行不通。有人在 post 上说要添加 spring-context-support 作为依赖项,我做到了。结果相同。
我已经关闭并回复了 Intellij 很多次,运行 并重新运行 mvn clean install ...没有任何东西可以使 tomcat 从 Intellij 中正常启动。有什么想法吗?
更新:我发现从命令行 运行ning 时也会发生这种情况,所以这不是 Intellij 的事情。这似乎与我使用 web.xml 而不是 Java 配置有关。我的理解是应该与 web.xml.
一起使用在我的web.xml中我定义了:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
如果我将它们注释掉,错误就会消失。但是当然,应用程序不会启动,因为没有 ContextLoaderListener。 :(
问题出在 tomcat8-maven-plugin 的配置上,我缺少 warSourceDirectory。
<configuration>
<port>8080</port>
<path>/myapp</path>
<addContextWarDependencies>true</addContextWarDependencies>
<contextFile>${project.build.outputDirectory}/myapp.xml</contextFile>
<warSourceDirectory>${project.build.directory}/${project.build.finalName}</warSourceDirectory>
</configuration>