Maven多模块项目,为什么需要“pom包装”?

时间:2012-06-25 13:23:54

标签: eclipse google-app-engine maven

我使用eclipse在maven上开发一个需要“war packaging”的app引擎项目(使用maven-gae-plugin archetype)。

我如何包含其他项目(例如公共图书馆项目),以便在其中一个子项目中完成更改时,所有内容都会更新?

一个解决方案可能是“多模块项目”,但我不明白为什么maven要求父项目是pom打包。另外,我担心更改为pom包装可能会破坏appengine兼容性(执行dev-server,从eclipse插件部署等等)

2 个答案:

答案 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”的原因是它没有作为可运行的代码部署在任何地方。