MAVEN的坐标和多模块的聚合

来源:互联网 发布:怎么提升淘宝等级 编辑:程序博客网 时间:2024/06/06 07:19

maven的坐标

Maven的坐标是用来唯一标识一个文件(例如jar包)的位置,类似于URL地址。由以下几个部分组成:

groupId:用于标识一个项目。

例如:某公司ikantalk.cn有一个crmx2项目。则可以这样命名名:cn.ikantalk.crmx2

artifactId:用于标识项目下的模块。

例如:crmx2项目下模块分为:core,common,model,web等。则artifactId分别为:core,common,model,web。

但通常artifactId只写core,common,model查找不是很方便,因为其它项目也有可能会有core,common等模块,导致不好区别。

所以一般都会以项目名做为前缀:crmx2-core,crmx2-common,crmx2-model,crmx2-web等。

这样,只看模块名,就能区别是哪个项目的哪个模块了。

version:版本号

这个不用多介绍,0.1.0,2.0.0等。

name: 模块的名字

执行mvn命令时,会显示在输出中。

packaging:打包方式

如果不指定,则默认值是jar。

根据项目性质的不同,可选择的值有:war,pom等。

打包成的文件名:crm-core-0.1.0.jar,crm-web-2.0.0.war等。

Maven的聚合

如果项目只有一个模块,谈聚合没有什么意义。

多个项目模块

crmx2下有两个项目模块,分别是comm和core。相应的pom.xml如下:

<project>    <groupId>cn.ikantalk.crmx2</groupId>    <artifactId>crmx2-comm</artifactId>    <version>1.0.0</version>    <name>CRM Comm Module</name>    <packaging>jar</packaging>    <dependencies>        ......    </dependencies></project>
<project>    <groupId>cn.ikantalk.crmx2</groupId>    <artifactId>crmx2-core</artifactId>    <version>1.0.0</version>    <name>CRM Comm Module</name>    <packaging>jar</packaging>    <dependencies>        ......    </dependencies></project>

这两个模块,每次构建时,都要在各自的目录中执行mvn命令。

两个模块还好,但是有4个,5个,甚至更多模块时,一次全部构建,也是很花时间的,而且是低效率的重复工作

如何能一次就构建多个项目,有没有更有效率的办法呢?

多项目模块的聚合

为了能一次构建两个(或多个)模块,就需要再创建一个pom.xml来对多个模块进行集中的操作,也就是聚合

新建一个用于聚合的pom.xml

<project>    <groupId>cn.ikantalk.crmx2</groupId>    <artifactId>crmx2-all</artifactId>    <version>1.0.0</version>    <name> Build All Modules</name>    <packaging>pom</packaging>    <modules>        <module>....</module>        ......    </modules></project>

注意:
1. 此pom.xml的packaging元素的值为:pom。
2. 使用了元素modules和module,module的值根据目录结构的不同,会有所区别。

聚合的目录结构

聚合的目录结构可分为:父子结构和平行结构,这是由聚合pom.xml的位置的不同而决定的。

父子结构

聚合pom.xml与项目模块crmx2-core,crmx2-comm目录平级,聚合pom.xml所在的build-all目录,也包括所有项目模块目录。

|_build-all    |_pom.xml    |_crmx2-core        |_pom.xml    |_crmx2-comm        |_pom.xml

此时,聚合pom.xml中的module定义如下:

<modules>    <module>crmx2-core</module>    <module>crmx2-comm</module></modules>

平行结构

聚合pom.xml**所在的bulid-all目录**与crmx2-core,crmx2-comm目录平级。

|_build-all    |_pom.xml|_crmx2-core    |_pom.xml|_crmx2-comm    |_pom.xml

此时,聚合pom.xml中的module定义如下:

<modules>    <module>../crmx2-core</module>    <module>../crmx2-comm</module></modules>

注意:module的值是模块的相对路径名,所以在使用不同的目录结构时,值会不同。

原创粉丝点击