简介:maven是项目构建和管理的工具,它提供了帮助管理、构建、报告、进行依赖管理等等。
一、maven的基本样式:
<project >
<modelVersion>4.0.0</modelVersion>
<groupId>com.imooc.springboot.study</groupId>
<artifactId>imooc-springboot-study</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.imooc.springboot</groupId>
<artifactId>split-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
1、POM代表工程对象模型,它是使用Maven工作的基本组建,是一个xml文件。
2、它被放在工程根目录下,文件命名为pom.xml
3、POM包含了关于工程和各种配置细节的信息,Maven使用这些信息构建工程。
二、maven的常用命令
示例:
mvn clean -Dmaven.test.skip=true -U
-Dmaven.test.skip:跳过测试用例
-U:该参数能强制让Maven检查所有SNAPSHOT依赖更新,确保集成基于最新的状态,如果没有该参数,Maven默认以天为单位检查更新,而持续集成的频率应该比这高很多。
三、maven相关特性
-
传递依赖与排除依赖
(1)传递依赖:如果我们的项目引用了一个jar包,而该jar包又引用了其他的jar包。那么,在默认情况下,项目编译时,Maven会把直接引用和间接引用的jar包都下载到本地(~/.m2/repository)(2) 排除依赖:如果我们只想下载直接引用的jar包,那么需要在pom.xml中做如下配置(给出需要排除的坐标)
<dependency> <groupId>org.apache.hbase</goupId> <artifactId>hbase</artifactId> <version>0.94.17</version> <exclusions> <exclusion> <goupId>commons-logging</goupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency>
-
依赖冲突
说明:若项目中多个jar同时引用了相同的jar时,会产生依赖冲突,但Maven采用了两种避免冲突的策略,因此在maven中是不存在依赖冲突的
1、短路优先(由于第二个路径比较短,本项目使用第二种路径的X.jar)
本项目->A.jar->B.jar->X.jar
本项目->C.jar->X.jar2、声明优先
若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁
-
多模块项目/聚合
为什么用多模块项目:(1)一开始使用单体架构,每次修改内容,都需要编译整个项目,时间过长(2)pom.xml使用来继承的,当其他的项目需要使用该项目的某个模块,当它是单体架构,必须把整个项目依赖进来,非常大,并且维护成本高为什么需要使用父模块: 每个子模块都有pom文件,都需要添加自己依赖的jar包,这样可能造成相同的依赖,都需要添加相同的依赖,并且可能出现版本号不一致的情况,所以使用父模块管理所有的jar包,其他的子模块只需要依附父模块
父模块的pom.xml需要注意的点: -
父模块pom文件的配置:packaging类型必须是pom
<groupId>com.imooc.coupon</goupId>
<artifactId>imooc-coupon</artifactId>
<packaging>pom</package>
- 聚合子模块:使用modules标签(在父模块中申明需要聚合的子模块)
<modules>
<module>coupon-common<module>
<module>coupon-template</module>
<module>coupon-settlement</module>
<module>coupon-distribution</module>
</modules>
- 父模块统一管理依赖包:使用dependencyManagement标签
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.could</goupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
子模块的pom.xml需要注意的点:
- 子模块需要在pom中声明父模块:使用parent标签
<parent>
<groupId>imooc-coupon</goupId>
<artifactId>com.imooc.coupon</artifactId>
<version></version>
</parent>