Maven
创建一个空项目
maven概述
自动化的项目构建工具。
make->ant->maven->gradle…
为什么要使用maven?
1、可以很方便的实现分布式项目构建。
2、强大依赖管理能力。
maven的安装和配置
解压即可用,需要配置环境变量。
1、解压到一个无中文无空格的目录中即可。
2、配置环境变量。
3、在命令行窗口执行 mvn -v
maven核心概念
maven项目的目录结构
约定大于配置。
常用的maven命令:
mvn clean:做清理工作,清理上一次编译结果。
mvn compile:做编译工作,编译main目录下的java源文件。
mvn test-compile:做编译工作,编译test目录下的java源文件。先编译main目录,再编译test目录。
mvn package:做打包工作,基于pom.xml中的标签配置的值,将项目打成对应的包。
mvn install:做安装工作,将当前项目安装到maven的本地仓库。
mvn deploy:做部署工作,将构建好的项目部署到对应的服务器中
maven的仓库
maven项目拉取的外部依赖,永远只到本地仓库中去查找。如果本地仓库中有对应的资源,引用该资源,如果没有对应的资源,maven会向中央仓库发起请求,从中央仓库中将对应的资源下载到本地仓库中,然后maven项目再从本地仓库中引用该资源。
本地仓库
默认本地仓库在c盘,一般会修改其本地仓库位置。
在mavne安装目录下的conf目录下的settings.xml中,将标签中的localRepository配置成本地仓库路径即可。
<localRepository>E:/maven/repository</localRepository>
远程仓库
中央仓库:
中央仓库镜像
私服
修改中央仓库镜像,用于改善资源下载速度。
<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的生命周期
不论执行生命周期的哪一个阶段(命令),都会从当前生命周期的最初位置开始执行。
clean lifycle:清理的生命周期,用于清理前一次的编译结果
default lifycle:核心生命周期,包含了编译、测试、打包、安装、部署等等命令。
site lifycle:生成站点。
mvn site
idea中maven的配置:
file->settings->build…->build tools->maven
maven home derictory:指向maven的安装目录
user settings files:指向maven安装目录中conf/settings.xml
maven的pom.xml
maven的坐标
坐标:用于定位,定位一个安装在仓库中的项目jar包的位置。生成的jar包的名称是以artifacId+"-"+version.jar命名。
:公司或组织的域名的倒写
:项目名称
:版本
<groupId>com.woniuxy</groupId>
<artifactId>20210928</artifactId>
<version>1.0-SNAPSHOT</version>
maven的依赖
项目中如果要导入外部依赖(jar包),需要通过来实现。
maven官方提供了一个网址:mvnrepository.com,在本地仓库中没有对应的maven依赖时,可到该网站查询。
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
<!--
scope用于指定依赖的作用范围:compile(默认值)
compile:指定当前依赖参与了编译、打包、部署等
test:指定当前依赖只参与测试阶段 junit.jar
provided:指定当前依赖只参与编译阶段,不参与打包、部署 servlet-api.jar
-->
<scope>compile</scope>
</dependency>
</dependencies>
scope:用于指定依赖的作用范围。
maven依赖的传递
只有在依赖的作用范围为compile时,该依赖才具备传递性,取值不为compile时,该依赖不具备传递性。
maven依赖的排除
标签用于排除其他项目传递过来的依赖,主要目的是避免jar包冲突。
<dependency>
<groupId>com.woniuxy</groupId>
<artifactId>20210928</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- exclusions用于排除其他项目传递过来的依赖。 -->
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
maven依赖的原则
1、路径最短者优先
2、路径相同时,先配置者优先
maven的继承
maven项目的分类:
通过的值来进行分类的。该标签取值有以下三个:
jar 普通java项目
war web项目
pom 父项目
继承的第一步:先创建父项目,在pom.xml中使用标签将项目的打包形式指定为pom,建议直接删除src目录。
继承的第二步:在子项目中,使用标签将父项目的坐标引入进来即可。
maven的聚合
maven项目的聚合在建立在继承的基础上。
聚合的第一步:在父项目的pom.xml中,使用来将子项目包含进来。
<modules>
<module>../B</module>
</modules>
聚合的第二步:在子项目的标签中使用指向父项目的pom.xml
<relativePath>../A/pom.xml</relativePath>
父项目集中管理依赖版本
父项目的操作:
1、在父项目的pom.xml中,使用标签统一管理依赖的版本
<properties>
<mybatis.version>3.5.6</mybatis.version>
</properties>
2、使用标签声明要引入到项目中的依赖,在标签中使用表达式将中的子标签的值取过来即可。
<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>
on>
子项目的操作:
使用<dependencies>标签按需加载对应的依赖,无需配置<version>标签。
```xml
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
</dependencies>