一.manve是什么?
Manve是一个项目管理工具, pom文件 通过添加和依赖管理系统, 可以通过一小段信息来管理项目的构建, 报告和文档的项目管理工具软件 . 包含了一个项目对象模型, 一组标准集合, 一个项目的生命周期, 一个依赖管理系统 ,和用来运行定义在生命周期阶段中插入 目标的逻辑
manve的作用 (能解决什么问题)
maven的坐标
坐标:每一个 jar 包或 maven 项目在网络上都有一个独一无二的身份证
坐标(GAV)
<groupId>com.czxy</groupId> <artifactId>maven_test2</artifactId> <version>1.0-SNAPSHOT</version>
若安装到仓库,在仓库的位置为:仓库/com/czxy/maven_test2/1.0-SNAPSHOT
clean:清空 target 目录
compile:生成 target 目录
package:在 target 目录生成 jar 包
install:将生成的 jar 包安装到本地仓库
1.依赖冲突的解决方案
manve中的依赖关系:
直接依赖: A依赖B
间接依赖:A依赖B B依赖C ,A间接依赖C
问题:如果一个项目,同时依赖另外一个 jar 的不同版本,就可能导致 jar 冲突问题。这就是传递性依赖的
Jar 版本冲突问题。
测试代码
<!--导入相关依赖包-->
<dependencies>
<!--引入spring-context,它所以来的包都会导入进来-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
</dependencies>
当jar出现冲突时,有两种做法
1)maven根据上面的两个调解原则,自动处理
2)使用exclusions标签手动,排除不需要的jar
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
<!--直接排除-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
dependencyManagement标签的作用是什么?
面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版
本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定
的版本的为准添加到工程中,此方法在企业开发中常用。
如下的配置是锁定了 spring-beans 和 spring-context 的版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
还可以把版本号提取出来,使用标签设置成变量。
如:
<!--版本号-->
<properties>
<spring.version>5.2.0.RELEASE</spring.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
聚合
当有多个项目需要打包进仓库时(其实就是当前项目依赖很多项目,所以当前项目执行前,需要把这些依赖的项目全部install进本地仓库),一个一个执行install太麻烦,maven有一个方法可以多个项目一起install到本地仓库。就是聚合。
例如:
有A,B,C三个项目需要install,新建一个用来聚合的项目aggreation(要保证aggreation和那三个项目是同一个GroupID。这句话的意思是如果这多个项目不是同一个GroupID,就不能用聚合了?)。
然后修改aggreation项目的pom文件:
1. 打包方式由jar修改为pom:
pom
2. 添加 标签
<modules>
<module>../A</module>
<module>../B</module>
<module>../C</module>
</modules>
这个 …/ 指什么?指maven的根目录?
应该是当前项目pom的上一级目录,其实就是所有项目存放的那个文件夹(也就是maven项目的根目录),然后就通过/A /B /C 代表当前项目和这三个项目的相对路径
然后对aggreation项目执行install命令,则项目A,B,C就都打包到本地仓库了。
执行aggreation项目如test,A,B,C项目也都会执行。即便ABC之间有依赖关系,如B依赖A,不用把A先执行安装,B同样会被执行。这是聚合的优势。
配置完聚合项目,只需要操作聚合项目,里面的项目都会被操作。不管这些项目之间是否有依赖。
继承:
为什么要使用继承:
pom.xml里面的配置,如果是多个项目,势必会出现依赖和插件的重复配置。在面向对象世界中,程序员可以使用类继承在一定程度上消除重复,在Maven的世界中,也有类似的
机制能让我们抽取出重复的配置,这就是pom的继承