我使用eclipse在maven上开发一个需要“war packaging”的app引擎项目(使用maven-gae-plugin archetype)。
我如何包含其他项目(例如公共图书馆项目),以便在其中一个子项目中完成更改时,所有内容都会更新?
一个解决方案可能是“多模块项目”,但我不明白为什么maven要求父项目是pom打包。另外,我担心更改为pom包装可能会破坏appengine兼容性(执行dev-server,从eclipse插件部署等等)
答案 0 :(得分:4)
多模块项目不仅是一种包装图书馆家属项目的方式,实际上是战争或耳朵。它允许您共享属性,插件,行为......
无论最终结构如何,这都是将它们链接在一起的方法。他们自己的生命周期是相关的。
所以,做你想做的更好的方法是
/
|your-parent-project
+--pom.xml --> pom
|
+--/your-webapp-project
| +--pom.xml --> war
|
+--/your-service-project
| +--pom.xml --> jar
|
+--/your-dao-project
| +--pom.xml --> jar
|
+--/your-common-resources-project
| +--pom.xml --> zip
您仍然会部署您的war项目,但父项目将包含有关团队,CI,依赖关系管理的信息。
你将发布你的父项目(使用maven-release-plugin自动标记和公会),因为它保存了所有这些项目的整个生命周期和关系。
Reactor(maven order engine)将安排构建顺序以匹配您的依赖项,例如。资源,道,服务,网络应用......
你真的应该阅读Sonatype的书:http://www.sonatype.com/books/mvnref-book/。
希望这个小小的解释会对你有所帮助!
答案 1 :(得分:1)
多模块项目是实现此目的的方法。 war项目应该是一个子模块,该项目应该使用gae-plugin。父项目只是公共库,war和您可能包含的任何其他项目之间关系的描述符。在我们的应用程序中,我们有2个战争项目(1个用于我们的网站,1个用于某些地图 - 减少在我们的应用程序的另一个版本上运行的东西)一个公共代码库(打包为jar)和一个我们用于的appengine远程项目效用函数。
父母只是一个“pom”的原因是它没有作为可运行的代码部署在任何地方。