Я новичок в Spring и столкнулся с небольшой проблемой: веб-приложение отлично работает при использовании Tomcat, но имеет проблемы при запуске его с Jetty.
Я запускаю следующие команды:
mvn package java -jar target/dependency/jetty-runner.jar target/*.war
Я получаю ошибку:
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [spring-config.xml]; nested exception is java.io.FileNotFoundException: class path resource [spring-config.xml] cannot be opened because it does not exist
Часть моего pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>test</groupId> <artifactId>test</artifactId> <version>1.0</version> <packaging>war</packaging> <dependencies> ... </dependencies> <repositories> ... </repositories> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.3</version> <executions> <execution> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-runner</artifactId> <version>7.4.5.v20110725</version> <destFileName>jetty-runner.jar</destFileName> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
Часть моего web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> ... <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext.xml </param-value> </context-param> ... </web-app>
Часть моего /WEB-INF/applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> ... <import resource="classpath:spring-config.xml" /> </beans>
Соответствующая структура каталогов:
- src --main ---java ----spring-config.xml ---webapp ----WEB-INF -----applicationContext.xml -----web.xml -pom.xml
Кажется, что проблема с определением пути к классу, но я незнать, как решить проблему.Я уже пытался указать classpath с помощью java -cp "..." ... или java -Djetty.class.path="..." ...
java -cp "..." ...
java -Djetty.class.path="..." ...
Любая помощь очень ценится!
Спасибо.
spring-config.xml должен быть в src/main/resources.XML-файлы в исходном каталоге Java не будут включены в classpath.
spring-config.xml
src/main/resources
Это автоматически, если вы используете плагин Jetty и работаете с mvn jetty:run (или jetty:run-war).
mvn jetty:run
jetty:run-war
Ваш CLASSPATH не включает контекст Spring.
Я бы посоветовал вам упаковать ваше приложение в WAR и развернуть его на Jetty.WEB-INF / classes всегда находится в CLASSPATH, поэтому, если вы скопируете свой XML-контекст Spring в этот каталог, загрузчик классов найдет их.
Вам нужен ContextLoaderListener в вашем файле web.xml?
ContextLoaderListener
Я вижу applicationContext.xml, упомянутый в вашем файле web.xml, но не spring-config.xml.Это тот, на который жалуется загрузчик классов.