最近刚完成一个用Maven构建的Web项目,看了一些Maven方面的书,比如《maven实战》,但还是对Maven多模块项目理解得不清晰,所以花了一点时间好好研究了下,现分享如下。
下面是一个简略的项目结构图
Parent
`------ childA(BusinessLayer)
`--- pom.xml
`------ childB(WebLayer)
`--- pom.xml
`------ pom.xml
在maven中,parent模块组织好childA和childB,叫做"聚合",多个模块联合编译。实现起来很简单,只需要在parent的pom文件里加入以下内容。
<modules>
<module>childAmodule>
<module>childBmodule>
modules>
这样只是告诉maven编译器,在读取parent的pom文件时去找到childA和childB,但还是会分别去编译他们引入的依赖。这样就会导致pom文件引入的包重复!!于是我们引入了"继承"的概念,也就是形成"父子"关系,子pom可以引用到父pom中引入的依赖。具体做法如下:
在parent中,写入以下内容,其中"*"标识的行可以组成一个路径,通过这个路径可以在maven仓库中找到这个pom文件!本例中,path为M2_Path/com/sang/main/Parent-Moduel/1.0.2/xxxx-1.0.2.pom。所以这三个标签是必须的!!!
<modelVersion>4.0.0modelVersion>
<groupId>com.sang.maingroupId> *
<artifactId>Parent-ModuelartifactId> *
<version>1.0.2version> *
<packaging>pompackaging>
<name>Simple-mainname>
父pom写好了,子pom就通过标签继承父pom的依赖,如下:
<parent>
<groupId>com.sang.maingroupId>
<artifactId>Parent-ModuelartifactId>
<version>1.0.2version>
<relativePath>../pom.xmlrelativePath>
parent>
值得注意的是标签,如果pom的层次关系就像本例中的那样只隔一层,则可以省略这个。maven同样可以找到子pom。
子pom中引入标签后,就会从父pom继承等属性了,例如childA只需要再加入如下内容即可!
<modelVersion>4.0.0modelVersion>
<groupId>com.sang.businessgroupId>
<artifactId>ChildA-moduleartifactId>
<packaging>jarpackaging>
<name>childAname>
maven可以让我们方便地管理jar包依赖,具体做法如下:
<dependencies>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>servlet-apiartifactId>
<version>2.5version>
dependency>
dependencies>
如果不通过继承,则需要在每个pom中加入这样的依赖,这样子pom对应的模块可以引用到这个jar包。上面提到的重复引用jar包,可以通过下面的方式解决:
主pom中把依赖通过引起来,表示子pom可能会用到的jar包依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>servlet-apiartifactId>
<version>2.5version>
dependency>
dependencies>
dependencyManagement>
子pom如果需要引用该jar包,则直接引用即可!不需要加入,便于统一管理。此外也可以加入仅在子pom中用到的jar包,比如:
<dependencies>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>servlet-apiartifactId>
dependency>
<dependency>
<groupId>org.codehaus.jacksongroupId>
<artifactId>jackson-core-lgplartifactId>
<version>1.9.4version>
dependency>
dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-source-pluginartifactId>
<version>2.1.1version>
plugin>
plugins>
pluginManagement>
build>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-source-pluginartifactId>
plugin>
plugins>
build>
<dependency>
<groupId>com.modulegroupId>
<artifactId>childAartifactId>
<version>1.0.0version>
dependency>
本文只是从多模块组织的角度说明了maven的基本用法, 当然,其他的复杂用法还是要参考maven手册。
————————————————
原文链接: https://blog.csdn.net/whuslei/article/details/7989102