Maven多模块布局实例详解
OK,现在应该看出来有什么不同了,我的项目结构比权威指南里面的介绍复杂、比Juven的那篇文章说的也复杂,接下来再看看这张图片:
<!--more-->上面这张图片是我在写这篇文章的时候刚刚找到的:《按需构建多模块,玩转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插件,集成单点登录功能
直观教程图片最给力:
五、和SVN的整合——maven-release-pluginmaven-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