java项目构建工具
特点
-
方便快速完成分布式开发
-
方便完成项目的依赖管理
安装与配置
解压后配置环境变量
仓库
存放maven项目的目录(文件夹)
本地仓库
默认位置:C:\Users\Administrator.m2\repository
本机上用于存放maven项目的目录,服务于本机所有maven项目
远程仓库
-
中央仓库
maven官方提供,服务器架设在国外,服务于全世界所有maven项目
-
中央仓库镜像
服务器架设在某一个区域内,服务区域内所有maven项目
-
私服
架设在局域网内的maven服务器,服务于当前局域网内所有的maven项目;
指定本地仓库
<!--apache-maven-3.6.0\conf\settings内修改-->
<localRepository>目录地址</localRepository>
配置中央仓库镜像
<!--apache-maven-3.6.0\conf\settings内修改-->
<mirrors>
<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>
</mirrors>
坐标
定位项目在maven仓库位置
groupId:配置项目所属公司或组织的域名(倒写)
artifactId:配置项目名称
version:配置项目版本
生命周期
maven有三套相互独立的生命周期,每套都包含了生命周期指令
clean lifecycle
执行清理工作
mvn pre-clean:执行清理工作之前执行的指令
mvn clean:清理前一次编译结果💥
mvn post-clean:执行清理工作之后执行的指令
不管执行生命周期的哪个阶段,都从当前生命周期最初位置开始执行
default lifecycle
核心maven会完成编译、测试、打包、安装、部署等工作;
mvn compile:编译💥
mvn test:测试
mvn package:打包💥
mvn install:安装💥
mvn depoly:部署
site lifecycle
生成站点信息(了解)
mvn site:生成当前项目站点信息
pom.xml
依赖
<dependencies>
标签引入外部依赖
子标签<dependency>
配置引入maven项目的坐标信息
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
</dependencies>
依赖传递
某个项目依赖了外部依赖又被其他项目所依赖,该项目依赖的外部依赖可传递到其他项目
<dependency>
子标签<scope>
:用于设置当前引入的外部依赖的作用范围,常用的取值有:
-
compile:表示依赖具备传递性(默认值)
-
test:表示依赖仅参与测试阶段,此时依赖不具备传递性(引入单元测试junit,取值就是test)
-
provided:表示依赖仅参与编译阶段,不参与打包部署,不具备传递性(引入servlet-api依赖,scope必须取成provided)
-
runtime:表示依赖会参与到运行阶段中(引入数据库驱动(mysql-connector-java),取值就是runtime)
依赖原则
-
项目中有多个相同依赖传递到本项目中,路径最短者优先;
-
路径相同时,先配置者优先;
依赖排除
<!--exclusions用于依赖排除,每个exclusion用于排除一个依赖-->
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
依赖继承
maven的继承是maven项目之间的继承,一定需要有一个父项目,子项目才可以去完成继承动作
maven的父项目是通过pom.xml中的<packaging>
标签设置
<packaging>
标签用于设置maven项目的打包形式:
jar:表示将当前项目打成jar包
war:表示将当前项目打成war包
pom:表示当前项目是一个父项目,如果设置为pom之后,当前项目进行编译或打包、安装、部署等操作时,不会对src目录进行任何操作(可以删除src目录)
实现步骤
-
创建父项目
<packaging>pom</packaging>
-
创建子项目,继承父项目
<!--子项目中通过parent标签来完成继承的动作--> <parent> <groupId>com.woniuxy</groupId> <artifactId>parent</artifactId> <version>1.0-SNAPSHOT</version> </parent>
maven继承中,父项目与子项目的关联性很弱,对父项目进行任何操作,子项目不会跟着发生变化
maven聚合
maven聚合是建立在继承基础上。实现聚合,要在父项目中通过<modules>
标签将子项目包含进来,此时父项目中执行操作,子项目会跟着执行相应操作
实现步骤:
-
在父项目中通过
<modules>
标签将子项目包含<modules> <module>MyShop_Commons</module> <module>MyShop_Dao</module> <module>MyShop_Service</module> <module>MyShop_Web</module> </modules>
-
在子项目的
<parent>
标签中使用<relativePath>
标签指向父项目的pom.xml<!--子项目中通过parent标签来完成继承的动作--> <parent> <groupId>com.woniuxy</groupId> <artifactId>parent1</artifactId> <version>1.0-SNAPSHOT</version> <!--子项目操作通过执行父项目的pom.xml来完成--> <relativePath>../parent1/pom.xml</relativePath> </parent>
父项目集中管理依赖版本
在父项目的pom.xml中可以通过<dependencyManagement>
声明依赖
注意:
此时依赖不会实际引入,在子项目中按需去加载所需依赖,一定不要加<version>
子标签
由于父项目中管理的依赖过多,导致查询相关依赖版本时比较难找,可直接在<properties>
标签中自定义版本标签
父项目
<properties>
<mybatis.version>3.5.6</mybatis.version>
</properties>
<!--该标签的子标签是dependencies-->
<dependencyManagement>
<!--
当dependencies标签处于dependencyManagement标签中
标签内部引入的外部依赖不会实际引入项目,只做相关声明
-->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
子项目
<dependencies>
<!--
子项目中使用父项目管理的依赖,此时在子项目要去按需加载对应依赖,
但是一定不要加version标签(加了version标签后就是单独引入一个依赖)
不然不走父项目管理依赖
-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
</dependencies>