maven的聚合和继承(三)
来源:互联网 发布:判断素数c语言 9是素数 编辑:程序博客网 时间:2024/06/04 19:23
一、聚合
当我们定义多个maven项目的时候,如果需要同时对这些项目进行打包编译,正常情况下会一一的进行打包编译操作,这样做会有些繁琐。这时我们会想,能不能只执行一次打包编译,就能对所有项目都有效?maven的聚合,就是为了解决这样的问题。
首先我们创建一个简单的maven项目xxx_parent,该项目是不作任何操作:
在Packageing中选择pom,意思是该项目是作为管理的项目。packaging中还有两个值:jar(打包成jar包)、war(打包成war包)
在pom.xml中使用modules标签对项目进行聚合操作,配置如下:(../表示相对路径)
<modules> <module>../xxx_log</module> <module>../xxx_service</module> <module>../xxx_core</module> </modules>
二、继承
我们在创建了maven项目后,发现pom.xml里有些依赖是一样的,这些pom.xml文件中存在着大量的重复。为了不在每个pom.xml中都重复配置相同的依赖,
我们让项目都继承一个根类,在根类里面配置依赖,这样不仅不需要对项目进行重复的依赖配置,而且能对依赖进行统一的管理。这就是maven中jar包依赖的继承。
跟上面聚合一样,我们要创建一个pom的项目(即packaging=pom)作为根类管理项目,在该项目的pom.xml文件里,我们把需要用到的jar依赖都拷贝进来。
子类项目要使用根类项目的依赖时使用parent标签实现继承(relativePath指的是相对路径,指向根类项目的pom.xml文件):
<parent><groupId>com.carlo</groupId> <artifactId>xxx_parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../xxx_parent/pom.xml</relativePath></parent>
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies>因为在根类项目中使用这种方式去声明依赖的话,在所有子类中,都会直接继承这个依赖。然而,并不是每个子类都需要这个依赖。
所以这里我们在根类中使用一个叫依赖管理的标签<dependencyManagement>,来管理依赖,这种方式不会直接被子类项目所继承。
因为在根类项目中已经声明了依赖的版本号(version)和作用域(scope),所以当子类项目需要用到某个依赖时,
只需在自己项目的pom.xml中只需声明依赖的 groupId 和 artifactId ,就会从根类项目中继承获取到对应的依赖。
如果有使用<exclusions>标签排除依赖,在根类项目中声明了,子类项目就不需要再次声明了(如下面示例中的xx/yy.0.0.jar包,
因为在根类项目中已经定义了依赖解除,所以子类项目中就不需要再次声明了)。
【这里我们可以把 groupId 和 artifactId 理解为坐标,子类项目通过这两个值(坐标)去匹配获取到根类项目中声明的对应依赖】
根类pom.xml示例:
<pre name="code" class="html"><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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.carlo</groupId> <artifactId>xxx_parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <build/> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>xx</groupId> <artifactId>yyy</artifactId> <version>0.0.1</version> <exclusions> <exclusion> <groupId>aa</groupId> <artifactId>bb</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </dependencyManagement> </project>
子类pom.xml示例:
<pre name="code" class="html"><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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion><parent><groupId>com.carlo</groupId> <artifactId>xxx_parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../xxx_parent/pom.xml</relativePath></parent> <artifactId>xxx_log</artifactId> <packaging>jar</packaging> <name>xxx_log</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>xx</groupId> <artifactId>yyy</artifactId> </dependency> </dependencies></project>
综上,就是聚合和继承的内容,我们发现,聚合和继承很类似,都是需要定义一个根类来作统一管理。
所以平时工作中,习惯把聚合和继承放到同一个pom管理项目中。
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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.carlo</groupId> <artifactId>xxx_parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <build/> <!-- 聚合 --> <modules> <module>../xxx_log</module> <module>../xxx_service</module> <module>../xxx_core</module> </modules> <!-- 继承 --> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>xx</groupId> <artifactId>yyy</artifactId> <version>0.0.1</version> <exclusions> <exclusion> <groupId>aa</groupId> <artifactId>bb</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </dependencyManagement> </project>
- maven的聚合和继承(三)
- Maven的聚合和继承(六)
- Maven 的继承和聚合
- maven的继承和聚合
- Maven的聚合和继承
- Maven的聚合和继承
- Maven的聚合和继承
- Maven的继承和聚合
- maven的继承和聚合
- maven的聚合和继承
- maven的聚合和继承
- Maven学习总结(三)——聚合和继承
- Maven学习笔记(五)---maven的聚合和继承
- eclipse中的maven管理之聚合与继承和版本的简单管理(三)
- Maven - 继承和聚合
- maven 聚合和继承
- Maven聚合和继承
- maven聚合和继承
- java保留两位小数
- Mysql:is not allowed to connect to this MySQL server
- 文章标题
- 操作系统进程同步互斥经典问题之读者写者问题
- C++primer学习:模板编程(2):类模板的定义
- maven的聚合和继承(三)
- 沙盒Sandbox介绍
- Mysql学习笔记一, 安装Mysql,简单命令学习
- No.6 Single Number II 一组数都出现n次除了某个数,找出这个数
- 基于opencv的符号提取源代码
- 最常用的排序——快速排序
- PHP+Mysql+AJAX无跳转刷新例子
- 小波变换入门知识总结
- LeJOS学习(6):Sensor的API研究-TouchSensor