2010-02-03 67 views
2

我一直在一个项目上长时间工作,现在又有一位开发人员加入,所以我想从SVN的机器上设置项目。我们双方都使用非常相似的调校:Spring ContextLoader无法找到applicationContext.xml

  • OS X雪豹
  • 最新的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),src/main/java中的项目代码和src/main/webapp中的所有web-app相关文件以及src/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的“服务器”的工具,我试图发动直接从Eclipse的应用程序,但是尝试当它与一个FileNotFoundException异常立即失败加载applicationContext.xml。

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

非常感谢您的帮助!

+2

检查文件是否已被复制到适当的位置 - 即WEB-INF/classes/applicationContext.xml – Bozho

+0

它不会复制到WEB-INF/classes,但在我自己的(正在运行的)项目中不是这种情况。相反,该文件按照Maven标准复制到目标/类。这又似乎在两台机器上都能正常工作。这个文件夹可能缺少一些配置,作为启动时类路径的一部分? – Lunikon

回答

3

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

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

它不会复制到WEB-INF/classes,但在我自己的(正在运行的)项目中不是这种情况。相反,该文件按照Maven标准复制到目标/类。

复制到target/yourapp/WEB-INF/classes,而不是由process-resources这是由默认调用的资源变化的m2eclipse(这一目标拷贝/过滤器资源target/classes)。这发生在package阶段(或明确调用war:war,war:inplacewar:exploded)。如usage页面中所述,WAR插件不负责编译java源文件或复制资源

所以我建议以package之前的战争来运行它在服务器上。也许你可以配置m2eclipse的对资源的变化进行自动设置(在你的项目右键单击,然后选择属性>的Maven并添加相应的war目标的目标来调用资源更改)。虽然没有尝试过。

+0

非常感谢,这解决了这个问题。通过这样做,我也遇到了我们的Maven代理的权限问题,所以这是一个很好的奖励。 – Lunikon

1

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

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

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

+0

我不认为将输出文件夹配置为'src/main/webapp/WEB-INF/classes'是个好主意。如果您有m2eclipse WTP支持(这里可能是这种情况),那么默认情况下,默认情况下,包装类型为“war”的项目将默认为“动态Web项目”。 –

+0

,它会保存更新吗?在我当前的配置中,输出文件夹是默认的(target/classes),但是我使用的是FileSync,因此xml中的单个更改不需要整个maven构建。否则,maven构建将被调用,这是可以的,但速度稍慢。 – Bozho

+0

我并不是说这是一个完美的解决方案,但是在'src'中生成东西真的不是很好的IMO(不会被'clean'清理)。生成的东西应该放在'target'中。最后,m2eclipse插件应该得到改进:) –

相关问题