Когда я опубликовал файл war для приложения, которое работает локально с Eclipse WTP, у меня было FileNotFoundException для файла bean.xml с определениями bean-компонентов.
SEVERE: Exception sending context initialized event to listener instance of
class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException:
IOException parsing XML document from class path resource
[META-INF/spring/beans.xml]; nested exception is java.
io.FileNotFoundException: class path resource [META-INF/spring/beans.xml]
cannot be opened because it does not exist
at Caused by: java.io.FileNotFoundException: class path resource
[META-INF/spring/beans.xml] cannot be opened because it does not exist
...
Я создал файл войны с помощью mvn war: war и скопировал его в папку веб-приложений Tomcat 7.
beans.xml находится в src / main / resources / META-INF / spring / beans.xml , и в моем файле pom.xml содержится следующее:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<directory>src/main/resources</directory>
</resource>
</webResources>
</configuration>
</plugin>
В файле war. Beans.xml упакован в META-INF / spring / beans.xml
В моем web.xml я:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:META-INF/spring/beans.xml</param-value>
</context-param>
Однако файл не найден. Как решить проблему?
ОБНОВЛЕНИЕ : как предположил Мэтью Фарвелл, bean.xml не упакован в нужном месте, поэтому его нет в пути к классам, я думаю, что он указан с параметрами maven-war-plugin, теперь я попробуйте посмотреть его документацию. Если кто-то знает, это было бы полезно.
UPDATE 2 : Как объяснено в документации по плагину maven-war-plugin , существует необязательный параметр targetPath. Я попытался, и после изменения конфигурации maven-war-plugin добавив targetPath, он был правильно упакован.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<directory>src/main/resources</directory>
<targetPath>WEB-INF/classes</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
ОБНОВЛЕНИЕ 3 : По предложению Райана Стюарта, я начал свою первоначальную настройку pom, используя roo, но после этого я сделал много изменений и больше не использую roo. Каталог src / main / resources не упоминается ни в каких других местах в pom.xml (я использовал grep), однако единственный параметр, который мне кажется подозрительным:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration><encoding>UTF-8</encoding></configuration>
</plugin>
Я закомментировал этот плагин, но ничего не изменилось, затем я закомментировал часть конфигурации maven-war-plugin, но src / main / resources больше не добавлялся в войну, поэтому сейчас я добавил я возвращаю его, и я загружаю его, чтобы протестировать его онлайн (на самом деле это все еще промежуточный сервер, а не конечный).
ОБНОВЛЕНИЕ 4 Райан Стюарт предположил, что проблема в том, что я запускаю «mvn war: war» вместо «mvn package», и это действительно было проблемой. С моим targetPath ресурсы появились в WEB-INF / classes, но там не было никаких классов.
Я сражался в тяжелом бою, хотя вместо этого более простым решением было удалить часть конфигурации, как в обновлении 3, и использовать «mvn package» для создания файла войны. Спасибо вам обоим, Райану и Мэтью, я не только решил свою проблему, но и узнал кое-что еще о Мейвене.