Spring ContextLoader无法找到applicationContext.xml

时间:2010-02-03 10:09:03

标签: java eclipse spring maven-2 m2eclipse

我已经在一个项目上独自工作了很长时间,现在另一个开发人员加入了,所以我想在他的机器上从SVN设置项目。我们都使用非常相似的设置:

  • OS X Snow Leopard
  • 最新Eclipse WTP
  • m2eclipse Maven插件
  • 颠覆SVN插件
  • Tomcat 6.0.24

使用的Spring版本是2.5.6。

我使用Eclipse的“Project from SVN”工具在他的机器上设置项目,基本上创建了1:1的项目副本。据我所知,Maven会毫无问题地处理所有依赖项,编译时没有问题。项目结构遵循带有src / main / resources中的资源(如applicationContext.xml)的webapps的Maven标准,src / main / java中的项目代码以及src / main / webapp和src中的所有web-app相关文件/ main / webapp / WEB-INF。

web.xml配置为加载上下文,如下所示:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

使用Eclipse的“Servers”工具我尝试直接从Eclipse启动应用程序,但在尝试加载applicationContext.xml时,它立即失败并出现FileNotFoundException。

由于从SVN检出的代码未被触及,我猜这个问题与Maven插件的某些参数有关。或者我忘记了完成设置的一些重要步骤。有没有人遇到过类似的问题或有什么想法我应该开始寻找?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:3)

  

项目结构遵循带有src / main / resources中的资源(如applicationContext.xml)的webapps的Maven标准,src / main / java中的项目代码以及src / main /中的所有web-app相关文件webapp和src / main / webapp / WEB-INF。

这是正确的,完全正常(因为您希望applicationContext.xml位于测试类路径上。)

  

它不会复制到WEB-INF / classes,但在我自己的(正常运行的)项目中并非如此。而是根据Maven标准将文件复制到目标/类。

复制到target/yourapp/WEB-INF/classes,而不是process-resources复制到资源更改时m2eclipse默认调用的target/classes(此目标将资源复制/过滤到{{1} })。这发生在package阶段(或明确调用war:warwar:inplacewar:exploded)时。正如usage页面中所述, WAR插件不负责编译java源代码或复制资源

所以我建议package战争之前在服务器上运行它。也许您可以配置m2eclipse在资源更改时自动执行此操作(项目中右键单击,然后选择属性&gt; Maven 并添加相应的war目标到调用资源更改的目标)。虽然没试过。

答案 1 :(得分:1)

使用服务器插件启动应用程序时,它希望您的Web文件夹包含所需的一切。这就是为什么你必须将项目输出文件夹(从项目构建路径选项)配置为src/main/webapp/WEB-INF/classes

或者,您可以使用FileSync插件复制文件。

顺便说一下,您没有指定Servers插件的选项,以及您的项目是否是“动态Web项目”(即可部署)。