首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

一个多maven项目集合的实例

2012-09-24 
一个多maven项目聚合的实例本文介绍一个多maven项目的实例demo,展示了聚合、继承、工程依赖、单元测试、多war

一个多maven项目聚合的实例
本文介绍一个多maven项目的实例demo,展示了聚合、继承、工程依赖、单元测试、多war聚合、cargo发布等场景

一、工程介绍

该项目由5个maven项目组成



task-aggregator是父工程,同时承担聚合模块和父模块的作用,没有实际代码和资源文件
task-common是基础工程,里面是公共的代码
task-sla是某一个业务子模块,不包含web内容
task-sla-web是某一个web子模块
task-web-dist是最外围的web工程,聚合多个web工程,形成最终的war包

依赖关系是:task-common <-- task-sla <-- task-sla-web <-- task-web-dist

二、task-aggregator



这个工程是起到聚合作用,并充当parent pom,所以没有任何实际代码和资源文件。我这里选择了平行结构,另外一种方式是树形结构,我个人感觉平行结构看起来更舒服一点

下面是pom,有所简化:


基本上是一目了然,只是有几点注意下:

    1、这里配置了<distributionManagement>,这样子项目就不需要重复配置了

    2、通过<pluginManagement>,对一些插件进行了公共的配置,这里主要是为了消除构建时的告警

    3、配置tools,是因为实际中发现,其他开发人员从svn上check out工程以后,有的人会报错,找不到tools.jar,这样配置以后就好了

三、task-common

该工程是公共工程,提供了项目中的公共代码,这里只包括了通用的DAO组件,作为示例。

该工程不依赖任何其他工程



该工程里有几点要点:

    1、在代码内部用了Spring的注解


这里没有什么特别要注意的,目录结构和task-common基本一样。比较特别的是可以看到Maven Dependencies里,有一个task-common工程,所以task-common里的任何修改,都可以第一时间在这个工程里体现出来,是比较方便的

关于这个问题,见另外一篇博客:http://kyfxbl.iteye.com/blog/1679806

另外就是前面说过的,hibernate的映射文件,应该放在src/main/resources下,而不是与Model类放在一起

五、task-sla-web

这个工程是上述task-sla工程的web层,依赖于task-sla,由于task-sla又依赖task-common,所以这个工程最终会同时依赖task-common和task-sla



然后这个工程里包含了web层的东西,包括Action类、jsp、图片、struts2的配置文件等,这些东西放在web工程里是最合适的



这里需要注意2点:

    1、这个工程的packaging类型是war,而不是jar。但是最终它不会独立打出war包来,其src/main/webapp里的所有文件,都会被最外围的task-web-dist工程聚合成一个总的war

    2、这个工程的WEB-INF目录下,没有web.xml(有也没用,最终会被覆盖)。默认情况下,packaging类型为war的项目,如果没有web.xml,则构建会失败,因此需要在pom里做一个配置

该项目的pom如下,省略了依赖部分:

上面的<failOnMissingWebXml>,就是配置缺少web.xml也不使构建失败

六、task-web-dist

这个工程是最外围的web工程,起到聚合的作用,即把所有的web项目,打成最终的war包。同时,在这个工程里,放置里公共的配置文件,比如struts.xml、ssoconfig.properties等



这个工程的聚合意图十分明显,比如struts.xml

提供了项目通用的配置,并把各子项目的struts2配置文件聚合起来。war包中的web.xml也是在这里提供的

下面是该工程的pom,也省略了依赖的配置:

这里主要是对maven-war-plugin和cargo-maven2-plugin这2个插件进行了配置,以起到聚合war,以及通过cargo启动容器的作用

关于多war聚合,以及cargo,见另外2篇博客:http://kyfxbl.iteye.com/blog/1678121、http://kyfxbl.iteye.com/blog/1677608

七、启动构建

在task-aggregator目录下,执行mvn clean deploy或者mvn clean install,就可启动整个构建过程,并将容器启动起来,跑最终生成的war包

热点排行