概述
专注于java应用的项目构建工具
优点
-
实现分布式开发很方便
-
强大的依赖管理能力
安装与配置
-
解压 - 配置环境变量 - Path内新增(bin目录路径)
-
cmd窗口输入(mvn -v),显示maven版本信息即表示配置成功
仓库
maven将java应用中所要用到的依赖都封装为maven项目
存储在maven自己的服务器上,对应存储的目录就是maven的中央仓库
本地仓库
本机上用于存储maven项目的目录,仅服务于本机上的所有maven项目
远程仓库
中央仓库:maven官方提供的仓库,服务于全世界所有的maven项目
中央仓库镜像:解决跨外网进行依赖下载速度慢问题,在某些区域内架设了一些服务器,将中央仓库中的内容全部下载到该服务器内,并对外提供服务。(服务于某个具体的区域)
私服:架构于某个局域网内的一台maven服务器,服务于当前局域网内所有的maven项目
maven项目只向本地仓库中引用依赖
-
有依赖 - 直接引用
-
没有依赖 - 向中央仓库中发出请求,将相关依赖下载到本地仓库,再由本地仓库向maven项目中提供引用
配置本地仓库
maven默认的本地仓库地址:C:\Users\Administrator.m2\repository
修改(apache-maven-3.6.0\conf\settings.xml)本地仓库位置:
<localRepository>E:\maven\repository</localRepository>
2.配置中央仓库镜像
<mirror>
<id>aliyun-public</id>
<mirrorOf>*</mirrorOf>
<name>aliyun public</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
<id>aliyun-central</id>
<mirrorOf>*</mirrorOf>
<name>aliyun central</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror>
<id>aliyun-spring</id>
<mirrorOf>*</mirrorOf>
<name>aliyun spring</name>
<url>https://maven.aliyun.com/repository/spring</url>
</mirror>
<mirror>
<id>aliyun-spring-plugin</id>
<mirrorOf>*</mirrorOf>
<name>aliyun spring-plugin</name>
<url>https://maven.aliyun.com/repository/spring-plugin</url>
</mirror>
<mirror>
<id>aliyun-apache-snapshots</id>
<mirrorOf>*</mirrorOf>
<name>aliyun apache-snapshots</name>
<url>https://maven.aliyun.com/repository/apache-snapshots</url>
</mirror>
<mirror>
<id>aliyun-google</id>
<mirrorOf>*</mirrorOf>
<name>aliyun google</name>
<url>https://maven.aliyun.com/repository/google</url>
</mirror>
<mirror>
<id>aliyun-gradle-plugin</id>
<mirrorOf>*</mirrorOf>
<name>aliyun gradle-plugin</name>
<url>https://maven.aliyun.com/repository/gradle-plugin</url>
</mirror>
<mirror>
<id>aliyun-jcenter</id>
<mirrorOf>*</mirrorOf>
<name>aliyun jcenter</name>
<url>https://maven.aliyun.com/repository/jcenter</url>
</mirror>
<mirror>
<id>aliyun-releases</id>
<mirrorOf>*</mirrorOf>
<name>aliyun releases</name>
<url>https://maven.aliyun.com/repository/releases</url>
</mirror>
<mirror>
<id>aliyun-snapshots</id>
<mirrorOf>*</mirrorOf>
<name>aliyun snapshots</name>
<url>https://maven.aliyun.com/repository/snapshots</url>
</mirror>
<mirror>
<id>aliyun-grails-core</id>
<mirrorOf>*</mirrorOf>
<name>aliyun grails-core</name>
<url>https://maven.aliyun.com/repository/grails-core</url>
</mirror>
<mirror>
<id>aliyun-mapr-public</id>
<mirrorOf>*</mirrorOf>
<name>aliyun mapr-public</name>
<url>https://maven.aliyun.com/repository/mapr-public</url>
</mirror>
生命周期
maven共有三套独立的生命周期,每一套生命周期都由多条指令构成
执行生命周期不管哪个阶段,都会从当前生命周期最初位置开始向下执行,直到对应的指令执行完成
clean lifecycle
用于清理前一次编译结果
-
clean-pre -- 在执行清理之前做的事情
-
clean:执行清理操作
-
clean-post:在执行清理之后做的事情
default lifecycle
完成编译、打包、部署、安装等等一系列操作(核心生命周期)
site lifecycle
用于生成当前项目的站点信息
应用(pom.xml)
坐标
用于定位一个maven项目在仓库的位置。
<!--公司或组织域名的倒写-->
<groupId>com.xxx</groupId>
<!--项目名称-->
<artifactId>75</artifactId>
<!--指定版本号-->
<version>1.0</version>
安装到仓库后,生成的jar包名以 “artifactId” + “-” + “version” + “.jar” 命名
依赖
查找依赖坐标信息网站:http://mvnrepository.com
引入依赖
通过
<dependencies>
标签及其子标签<denpendency>
完成
<denpendency>
内配置某一个maven项目(子项目或者jar(以前叫jar))的坐标信息
<dependencies>
<dependency>
<!--依赖坐标-->
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
<!--指定当前依赖的作用范围-->
<scope>runtime</scope>
</dependency>
</dependencies>
依赖的传递
只有引入的依赖scope取值为compile时,依赖才具备传递性,其他值都不具备
-
compile:默认值,当前依赖会跟随当前项目被打包和部署
-
test:当前依赖只在测试阶段存在(junit)
-
provided:当前依赖只参与编译过程,不参与打包和部署过程(servlet-api)
-
runtime:设置该值,当前依赖会参与到项目运行中
-
system:表明当前依赖从系统路径中获取,必须和<systemPath>配合使用(一般不用)
依赖传递原则
-
路径最短者优先
-
路径相同时,先配置者优先
依赖的排除
<dependency>
<groupId>com.xxx</groupId>
<artifactId>004</artifactId>
<version>1.0-SNAPSHOT</version>
<!--
使用exclusions来手动排除到maven项目传递过来的依赖
避免由传递的的依赖版本与当前项目中的版本不一致而导致的版本不兼容问题。
-->
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
继承
通过<packaging>
指定为父项目
该标签可取值
jar:普通java项目都可使用该值(默认值)
war:web项目才可取这个值
pom:
如果maven项目打包为pom,意味着当前项目是一个父项目
打包为pom后,对当前项目进行的所有操作都不会影响src目录下的内容
一般来说,如果打包成pom,我们就会直接将src目录删除
继承的实现
-
父项目打包成pom
<packaging>pom</packaging>
-
子项目中通过
<parent>
标签来实现继承操作<parent> <groupId>com.woniuxy</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> </parent>
maven的聚合
聚合建立在继承基础上,在父项目中通过
<modules>
标签关联子项目
<modules>
<!--建立父项目与子项目之间的强关系-->
<module>../child</module>
</modules>
maven项目的继承,父子项目之间关联性很弱,父项目做任何操作不会影响子项目
maven项目的聚合,父子项目之间关联性强,父项目做任何操作,子项目也会跟着做对应的操作。
父项目集中管理依赖版本
父项目中可以通过<dependencyManagement>标签来声明相关依赖,该标签只做声明,不做实现引入
父项目
<properties>
<!--在properties标签中通过自定义来完成依赖版本的管理-->
<mybatis.version>3.5.9</mybatis.version>
</properties>
<!--该标签只做声明不做实际引入-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
子项目
<!--如果需要让父项目来统一管理依赖版本,那么子项目中导入相关依赖时一定不能引入版本号-->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
</dependencies>