我已经在一个项目上独自工作了很长时间,现在另一个开发人员加入了,所以我想在他的机器上从SVN设置项目。我们都使用非常相似的设置:
使用的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插件的某些参数有关。或者我忘记了完成设置的一些重要步骤。有没有人遇到过类似的问题或有什么想法我应该开始寻找?
非常感谢你的帮助!
答案 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:war
,war:inplace
或war:exploded
)时。正如usage页面中所述, WAR插件不负责编译java源代码或复制资源。
所以我建议package
战争之前在服务器上运行它。也许您可以配置m2eclipse在资源更改时自动执行此操作(项目中右键单击,然后选择属性&gt; Maven 并添加相应的war
目标到调用资源更改的目标)。虽然没试过。
答案 1 :(得分:1)
使用服务器插件启动应用程序时,它希望您的Web文件夹包含所需的一切。这就是为什么你必须将项目输出文件夹(从项目构建路径选项)配置为src/main/webapp/WEB-INF/classes
或者,您可以使用FileSync插件复制文件。
顺便说一下,您没有指定Servers插件的选项,以及您的项目是否是“动态Web项目”(即可部署)。