一点一点学maven(08)——maven聚合和继承
来源:互联网 发布:推荐充电宝 知乎 编辑:程序博客网 时间:2024/05/14 08:09
1、maven聚合
在maven模块化开发过程中,要把一个项目的多个模块安装到本地仓库中,需要对各个模块执行install命令。也可以将其放在一起运行,这样的方式就被称为聚合。
比如将项目A、B、C执行聚合打包安装,此时创建一个D项目,将D项目的packing设置为pom,使用<modules>
标签将前面三个项目聚合,然后在D项目执行install命令,A、B、C三个项目就会被同时打包安装到本地仓库中。
<groupId>com.jsun.test</groupId> <artifactId>D</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>D</name> <url>http://maven.apache.org</url> <!-- 将A、B、C项目聚合 --> <modules> <module>../A</module> <module>../B</module> <module>../C</module> </modules>
D项目执行install命令后,控制台执行结果如下:
[INFO] Scanning for projects...[INFO] ------------------------------------------------------------------------[INFO] Reactor Build Order:[INFO] [INFO] C[INFO] B[INFO] A[INFO] D[INFO] [INFO] ------------------------------------------------------------------------[INFO] Building C 0.0.1-SNAPSHOT[INFO] ------------------------------------------------------------------------。。。。。。[INFO] ------------------------------------------------------------------------[INFO] Building B 0.0.1-SNAPSHOT[INFO] ------------------------------------------------------------------------。。。。。。[INFO] ------------------------------------------------------------------------[INFO] Building A 0.0.1-SNAPSHOT[INFO] ------------------------------------------------------------------------。。。。。。[INFO] ------------------------------------------------------------------------[INFO] Building D 0.0.1-SNAPSHOT[INFO] ------------------------------------------------------------------------。。。。。。[INFO] Reactor Summary:[INFO] [INFO] C .................................................. SUCCESS [ 5.915 s][INFO] B .................................................. SUCCESS [ 0.162 s][INFO] A .................................................. SUCCESS [ 0.127 s][INFO] D .................................................. SUCCESS [ 0.061 s][INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 6.553 s[INFO] Finished at: 2016-07-31T22:58:54+08:00[INFO] Final Memory: 17M/112M
2、maven继承
上述A、B、C三个项目都是用junit,在它们各自的pom.xml中都进行了配置,此时就重现了许多的重复,给维护、管理带来很多不便。
maven提供了向java中继承的概念和功能,将公共组件提到父类中,子类通过继承使用。
例子:
新建项目P作为项目A、B、C的公共父类:
<groupId>com.jsun.test</groupId> <artifactId>P</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 将packing更改为pom --> <packaging>pom</packaging> <name>P</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>3.8.1</junit.version> </properties> <!-- 使用dependencyManagement标签管理依赖,实际管理的是依赖的版本号,让所有子项目中引用对应依赖而不用显式的列出版本号;依赖并不会在当前项目引入 --> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement>
然后A(B、C)项目继承项目P:
<!-- 使用parent标签,实现对父模块的继承 --> <parent> <groupId>com.jsun.test</groupId> <artifactId>P</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <!-- 定义子模块的坐标信息,如果子项目与父项目的groupId、version相同,则去掉groupId和version,继承使用父模块的groupId或(和)version --> <artifactId>A</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <!-- 使用继承的父模块的版本号dependencyManagement中管理的版本号 --> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies>
补充说明:
dependencies标签管理的依赖可以被子模块共享,比如一个父模块parent引入了junit依赖,在子模块child中自动被引入,实现依赖共享,也就是说子模块一下子就把父模块所有的依赖拿到了;
dependencyManagement标签管理的依赖无法被子模块共享(确切的说应该是除了版本号的其它信息无法共享),比如一个父模块parent引入了junit依赖,在子模块child中并无法被自动引入,此时child需要手动引入junit包,但是自己不用管理版本号,也就是不再用version标签。
总结:在子模块继承父模块的关系中,dependencies实现对依赖的统一管理,主要为了让子模块共享所有依赖;dependencyManagement实现的是对版本号的统一管理,子模块并不会共享所有模块,即不会一下子拿到所有依赖。
- 一点一点学maven(08)——maven聚合和继承
- 一起学Maven(Maven聚合和继承)<四>
- 项目管理利器(Maven)——继承和聚合
- Maven学习总结(三)——聚合和继承
- Maven - 继承和聚合
- maven 聚合和继承
- Maven聚合和继承
- maven聚合和继承
- 【Maven】聚合和继承
- maven聚合和继承
- Maven聚合和继承
- Maven - 继承和聚合
- Maven:聚合和继承
- maven 聚合和继承
- Maven继承和聚合
- maven--继承和聚合
- 【maven】---聚合和继承
- 【Maven】聚合和继承
- Storm基础
- 基于基因表达谱的肿瘤特征基因提取算法MATLAB源代码
- PAT-A 1100. Mars Numbers
- Linux文件拷贝命令?
- 2016/07/31--这个月我的一些经历
- 一点一点学maven(08)——maven聚合和继承
- Android虚拟按键遮挡Listview的FooterView问题
- 最优化学习笔记(七)——Levenberg-Marquardt修正(牛顿法修正)
- spring事务PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED区别(转载)
- layer的使用笔记
- Linux 下使用mount命令挂载CDROM
- Visual Studio 的免费性能调试工具
- 01-Shiro初识
- 机器学习(周志华) 参考答案 第四章 决策树 4.5