ClassNotFoundException: ContextLoaderListener при использовании Intellij с плагином maven tomcat8 и PostResources

Я использую 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. :(


person Robert Bowen    schedule 20.04.2020    source источник


Ответы (1)


Проблема заключалась в конфигурации плагина tomcat8-maven, мне не хватало файла 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>
person Robert Bowen    schedule 24.04.2020