Я использую Intellij с плагином maven tomcat8. Я добавил 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 моего проекта есть jar spring-web. Я видел много сообщений о том, как заставить это работать с Eclipse, вручную добавляя банки в развертывание. И я видел, что вы можете сделать что-то подобное в Intellij, в Файл -> Структура проекта -> Артефакты, но не видел, где добавить зависимости, и я не думаю, что это все равно будет работать. В одном сообщении кто-то сказал добавить поддержку spring-context в качестве зависимости, что я и сделал. Тот же результат.
Я много раз закрывал и отвечал на Intellij, запускал и повторно запускал mvn clean install ... ничто не заставит tomcat правильно запускаться из Intellij. Любые идеи?
ОБНОВЛЕНИЕ: я обнаружил, что это также происходит при запуске из командной строки, так что это не дело 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. :(