Maven多模块布局实例详解
OK,现在应该看出来有什么不同了,我的项目结构比权威指南里面的介绍复杂、比Juven的那篇文章说的也复杂,接下来再看看这张图片:

上面这张图片是我在写这篇文章的时候刚刚找到的:《按需构建多模块,玩转Maven反应堆》,和上面的Maven多模块布局概图对比一下是不是基本一样?真是后悔当初怎么没有看到Juven的这篇文章,后来把hibernate的项目checkout下来分析他的maven多模块结构布局然后再结合实际应用得出的Maven多模块布局概图。 OK,现在你对多模块布局有了初步的印象了,接下来才是重点,逐个击破、逐个分析。
三、多模块布局详解无图无真相,有图才给力:(如果想真正了解多模块那么请先看着图片和说明揣摩一下含义……)

声明:由于是本例是根据实际应用的项目来分析的,所以会比之前说的教程和Juven的文章实例复杂一些。
parent不负责管理子模块,只是被子模块集成,千万不要和denong-pb目录的pom.xml混淆service:就是业务处理类,供web模块调用; web-parent:供web*模块继承,例如前后台都需要调用的Action接口,像数据字典、地区信息、系统属性等 web-admin:系统的后台管理程序,使用了struts2的convention插件; web-site:系统网站部分,同样使用了struts2的convention插件,集成单点登录功能
直观教程图片最给力: 
maven-release-plugin是经常使用的插件,这里简单介绍一下,要点:
D:\wsria\projects\denong\denong-pb>mvn release:perform
如果你够细心可能发现了上面出现了relativePath属性,这个再多模块的配置中经常遇到的问题,根据目前的案例来说子模块和parent是同级的目录,但是每个子模块又都需要继承parent模块的一些配置,比如上面介绍的到common模块会使用如下配置:
?123456<PARENT> ????<GROUPID>com.wsria</GROUPID> ????<ARTIFACTID>parent</ARTIFACTID> ????<VERSION>1.0.5-SNAPSHOT</VERSION> </PARENT> <ARTIFACTID>common</ARTIFACTID> 现在问题来了,在common模块下执行命令:mvn compile,得到的结果中包含了警告信息:
[WARNING] 'parent.relativePath' points at com.wsria:dn-pb instead of com.wsria:dn-pb-parent, please verify your project structure @ line 4, column 10
意思是找不到dn-pb-parent这个模块……因为maven不知道dn-pb-parent模块存在的位置才会导致警告信息的出现,解决办法是手动指定dn-pb-parent模块的位置,所以最终的解决办法是在parent标签中加入:
?1<RELATIVEPATH>../parent/pom.xml</RELATIVEPATH> 这样maven就知道继承的parent的具体位置了,
relativePath默认值为../pom.xml,参考:http://maven.apache.org/ref/3.0/maven-model/maven.html
完整的parent继承配置:
?1234567<PARENT> ????<GROUPID>com.wsria</GROUPID> ????<ARTIFACTID>dn-pb-parent</ARTIFACTID> ????<VERSION>1.0.5-SNAPSHOT</VERSION> ????<RELATIVEPATH>../parent/pom.xml</RELATIVEPATH> </PARENT> <ARTIFACTID>dn-pb-common</ARTIFACTID> 现在运行mvn命令一切正常了;
记得每一个继承parent模块的子模块都需要添加relativePath设置七、多模块开发期间Debug
一般我们在开发web模块的时候会启用tomcat或者jboss的debug模式来断点调试应用,但是你会发现如果web模块依赖了service模块想进入service模块debug但是eclipse却告诉你找不到class的源码,解决办法:
把service模块加入到Build Path的Project列表中八、其他方案
如何布局是根据每一个项目组的安排定义的,比如
怎么布局需要根据项目实际情况来定义,当然要考虑到单个子模块的重复利用,例如service模块在本例中被web-admin和web-site模块使用,如果以后再加入webservice模块那么webservice也要依赖,或许还有命令行(command)模块也要依赖九、结束语
这是一篇难产的文章,有些原因影响经过了3个晚上才出世,呵呵有不对的地方请留言以改正;分享这篇文章的目的就是给刚刚接触或者正需要maven多模块布局的童鞋们参考,希望能对你有帮助,谢谢关注!
?
转载http://www.kafeitu.me/2010/11/10/maven-multi-modules-designe.html