Maven聚合与继承
2017-10-17 17:09
477 查看
Maven
用过maven的都知道,加入很少的配置,maven就能很好的帮我们管理项目。Maven提倡约定优于配置,这是Maven最核心的设计理念之。约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。----来源百度百科。
Maven约定的项目结构如下:
MavenProject(项目根目录)
|----src
| |----main
| | |----java ——存放项目的.java文件
| | |----resources ——存放项目资源文件,如spring, hibernate,properties等配置文件
| |----test
| | |----java ——存放所有测试文件,如JUnit测试类
| | |----resources ——存放项目测试用de资源文件,如spring, hibernate,properties等配置文件
|----target ——项目构建目标输出目录
|----pom.xml ----用于标识该项目是一个Maven项目,包括构建的一些配置
模块化
随着项目扩大,Maven项目也会越来越大。会带来一些麻烦。1.比如修改了JS文件,但我们依旧要将整个Project都build一下。
2.所有人都在一个Project里面进行更改,可能导致混乱、冲突,也不利于维护。
3.每添加一个jar包或者依赖时,是为整个Project添加的。可见性很大。
因此,为了“高内聚,低耦合”考虑,maven对Project进行模块划分,每个模块都会对应着一个POM.xml文件,然后按照一定的关系组合(继承和聚合)成大的Project。也即是多模块系统。
聚合
把Project模块化成多个项目后,尤其是模块非常多的时候,我们需要一次构建多个项目,而不是到多个模块的目录下分别执行命令进行构建。Maven的聚合特性就是满足该需求的。把多个模块或项目聚合到一起,我们可以建立一个专门负责聚合工作的project。通过构建这个新的Project,就可以完成整个Project的构建。
聚合pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>mavenaggregator</artifactId>
<!-- must be pom if aggregator -->
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>my Maven Webapp</name>
<url>http://maven.apache.org</url>
<modules>
<!-- relative paths to the directories of pom -->
<module>my-project</module>
<module>another-project</module>
</modules>
</project>子模块pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>my-project</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>my-project</name>
<url>http://maven.apache.org</url>
</project>子模块pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>my-project</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>my-project</name>
<url>http://maven.apache.org</url>
</project>
这里说一下:聚合模块的pom没有实质性内容,只有一个pom.xml文件。只是用来帮助其他模块构建的工具。
packaging的方式为pom。对于聚合模块来说,其打包方式必须为pom,否则无法构建!
modules: 实现聚合的配置,可以添加任意数量的module元素实现聚合。其中,每个module的值为当前POM的相对路径,即同目录下文件夹名。
为了方便,通常将聚合模块放在项目目录的最顶层,而其他模块则作为聚合模块的子目录存在。
继承
我们知道,在Java中为了复用,我们经常使用继承。同样在maven中,也是通过继承来减少重复,增加复用。创建POM的父子结构,然后在父POM中声明一些配置供子POM继承。因为父模块只是为了帮助消除配置的重复,因此不需要src/main/java 文件。
父pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>parent-project</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>my-project</name>
<url>http://maven.apache.org</url>
</project>子pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>child-project</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>my-project</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>com</groupId>
<artifactId>parent-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
</project>这里注意下,父pom.xml的 packaging 也要是 pom.
父pom里面可继承的pom元素很多,官网也列出了,如下:
可继承的POM元素 | 说明 |
groupId | 项目组ID,项目坐标的核心坐标; |
version | 项目版本,项目坐标的核心坐标; |
description | 项目的描述信息; |
organization | 项目的组织信息; |
inceptionYear | 项目的创始年份; |
url | 项目的URL地址; |
developers | 项目的开发者信息; |
contributors | 项目的贡献值和信息; |
distributionManagement | 项目的部署配置; |
issueManagement | 项目的缺陷跟踪系统; |
ciManagement | 项目的持续集成系统信息; |
scm | 项目的版本控制系统信息; |
mailingLists | 项目的邮件列表信息; |
properties | 自定义的Maven属性; |
dependencies | 项目的依赖配置; |
dependencyManagement | 项目的依赖管理配置; |
repositories | 项目的仓库配置; |
build | 包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等; |
reporting | 包括项目的报告输出目录配置、报告插件配置等。 |
<parent>
<groupId>com</groupId>
<artifactId>mavenaggregator</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
相关文章推荐
- Maven详解之聚合与继承
- Maven学习笔记(五)---maven的聚合和继承
- 【Maven】聚合和继承
- maven聚合与继承
- Maven学习总结(5)——聚合与继承
- 【Maven】聚合和继承
- Maven入门-5.Maven的聚合和继承
- Maven实战(六)--子模块的聚合和继承
- Maven-继承、聚合
- maven的聚合与继承
- maven的继承与聚合
- Maven-继承、聚合
- maven聚合与继承笔记
- maven 为何要模块划分-聚合/继承
- Maven 聚合与继承
- Maven详解之聚合与继承
- Maven项目的聚合和继承
- maven依赖、聚合、继承、版本管理
- Maven学习6之eclipse下 maven几个注意点:排除、聚合、继承