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

4
我使用eclipse开发一个需要"war packaging"(使用maven-gae-plugin archetype)的app engine项目。
如何以这样的方式包括其他项目(例如一个公共库项目),使得当子项目中有更改时,一切都会更新?
一个解决方案可能是“多模块项目”,但我不明白为什么maven要求父项目是pom packaging。此外,我担心改变成pom packaging可能会破坏appengine的兼容性(执行dev-server,从eclipse插件部署等)。
2个回答

4

多模块项目不仅是打包库依赖项目的一种方式,也可以是war或ear。它允许您共享属性、插件和行为...

这是一种将它们联系在一起的方式,而不考虑最终结构。它们自己的生命周期是相关的。

因此,更好的做法是:

/
|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排序引擎)将安排构建顺序以匹配您的依赖关系,例如资源、dao、服务、Web应用程序...
您真的应该阅读Sonatype的书:http://www.sonatype.com/books/mvnref-book/
希望这篇简短的解释对您有所帮助!

1
一个多模块项目可以实现这个目标。WAR 项目应该是子模块,而该项目应该使用 gae-plugin 插件。父项目只是一个描述公共库、WAR 和任何其他可能包含的项目之间关系的描述器。在我们的应用中,我们有两个 WAR 项目(一个用于我们的网站,另一个用于运行在我们应用程序的另一个版本上的一些 map-reduce 任务),一个通用代码库(打包成 jar),以及一个我们用于实用功能的 appengine-remote 项目。
父项目之所以只是“pom”,是因为它不会作为可运行代码部署到任何地方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接