Java Spring ContextLoader无法找到applicationContext.xml

Java Spring ContextLoader无法找到applicationContext.xml,java,eclipse,spring,maven-2,m2eclipse,Java,Eclipse,Spring,Maven 2,M2eclipse,我一个人在一个项目上工作了很长时间,现在另一个开发人员加入了,所以我想在他的机器上从SVN建立这个项目。我们都使用非常相似的设置: 雪豹 最新Eclipse WTP M2EclipseMaven插件 颠覆性SVN插件 Tomcat 6.0.24 使用的弹簧版本是2.5.6 我使用Eclipse的“ProjectfromSVN”工具在他的机器上设置了该项目,实际上是创建了该项目的1:1副本。据我所知,Maven处理了所有依赖项,没有问题,项目编译没有问题。项目结构遵循web应用的Maven标准

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

  • 雪豹
  • 最新Eclipse WTP
  • M2EclipseMaven插件
  • 颠覆性SVN插件
  • Tomcat 6.0.24
使用的弹簧版本是2.5.6

我使用Eclipse的“ProjectfromSVN”工具在他的机器上设置了该项目,实际上是创建了该项目的1:1副本。据我所知,Maven处理了所有依赖项,没有问题,项目编译没有问题。项目结构遵循web应用的Maven标准,资源(如applicationContext.xml)位于src/main/resources中,项目代码位于src/main/java中,所有web应用相关文件分别位于src/main/webapp和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>

上下文配置位置
类路径:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
使用Eclipse的“服务器”工具,我尝试从Eclipse直接启动应用程序,但在尝试加载applicationContext.xml时立即失败,出现FileNotFoundException

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


非常感谢你的帮助

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

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

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

项目结构遵循web应用的Maven标准,资源(如applicationContext.xml)位于src/main/resources中,项目代码位于src/main/java中,所有web应用相关文件分别位于src/main/webapp和src/main/webapp/web-INF中

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


它没有复制到WEB-INF/classes,但在我自己的(功能)项目中不是这样。相反,该文件按照Maven标准复制到目标/类

被复制到
target/yourapp/WEB-INF/classes
,但不是通过
进程资源
进行的,后者在资源更改时默认由m2eclipse调用(此目标将资源复制/过滤到
target/classes
)。这发生在
阶段(或显式调用
war:war
war:inplace
war:exploded
时)。如页面中所述,WAR插件不负责编译java源代码或复制资源


因此,我建议在服务器上运行war之前将其打包。也许您可以将m2eclipse配置为在资源更改时自动执行此操作(右键单击项目上的,然后选择Properties>Maven,并将相应的
war
目标添加到资源更改时要调用的目标中)。但没有尝试此操作。

检查文件是否已复制到适当的位置,即WEB-INF/classes/applicationContext.xml它未复制到WEB-INF/classes,但在我自己的(功能)项目中并非如此。相反,该文件按照Maven标准复制到目标/类。这似乎同样适用于两台机器。可能缺少一些配置,无法在启动时将此文件夹作为类路径的一部分包含?我认为将输出文件夹配置为
src/main/webapp/WEB-INF/classes
不是一个好主意。仅供参考,如果您有m2eclipse WTP支持(这里很可能是这种情况),则默认情况下,带有
war
类型打包的项目将被识别为“动态Web项目”。并且它会在保存时更新吗?在我当前的配置中,输出文件夹是默认的(target/classes),但我使用的是FileSync,这样整个maven构建就不需要对xml进行任何更改。否则,maven构建将被调用,这是可以的,但是有点慢。我不是说这是一个完美的解决方案,但是在
src
中生成东西在IMO中确实不是很好(不会被
clean
清理)。生成的内容应放入
目标
。最终,m2eclipse插件应该得到改进:)同意m2eclipse:)并且src应该是干净的——这就是我使用FileSync的原因。但是我看到过这样的配置,它们工作正常(使用适当的svn:当然忽略),非常感谢,这解决了问题。通过这样做,我在我们的Maven代理上也遇到了一个权限问题,所以这在顶部是一个不错的奖励。