收到Spring/Maven项目后,我:
- 运行
mvn eclipse:eclipse
, - 加载到Eclipse JEE(最新版本,叫做Neon),
- 添加
Dynamic Web Module
面, - 点击运行Jetty。
问题:它没有找到自己的applicationContext.xml,即使它存在于src/main/webapp/WEB-INF/classes/applicationContext.xml
。
16:58:58.183 [main] ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applicationContext.xml]; nested exception is java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist
问题:我如何告诉Eclipse JEE applicationContext.xml在哪里,或者解决这个问题?
WEB-INF/classes是Maven war插件在构建war时创建的目录,它不应该是一个项目文件夹。Maven war插件会为任何war项目创建它,这样它就可以把你的src/main/java和src/main/resources文件夹中的编译类和资源放在那里,按照标准的Maven约定。
同样,WEB-INF/lib是由war插件自动创建的,并填充了war模块的依赖项,这些依赖项没有提供的范围。
所以把文件(以及你现在在src/main/webapp/classes中的任何其他文件)放在war模块的src/main/resources文件夹中,它应该像预期的那样工作。
旁注:这只适用于类和lib子目录;在你的项目中有一个WEB-INF文件夹是完全有效的,这样你就可以在WEB-INF中添加文件(比如:web.xml)。