什么是Maven
maven是管理和构建java的工具
Maven的作用
依赖管理
方便快捷导入jar包,避免版本冲突问题。无需再手动导入jar包
在maven工程中的pom.xml文件中直接导入jar包并且可以自由切换版本,无需再手动导入
统一项目结构
maven工程生成标准结构在任何java编译器中都可以使用
标准化项目构建方式
通过maven给的指令能够快速完成项目的操作
认识maven
maven在安装第三方依赖的时候会走
本地仓库 -> 远程仓库(可能不存在)-> 中央仓库
下载maven
https://maven.apache.org/download.cgi
配置maven
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
配置完成后cmd中输入mvn -v。看到版本号就说明配置成功了
创建maven工程
首先在全局设置中配置我们下载的Maven
新建maven项目
点击新增项目,选择Maven然后点击创建
生成结构如下
pxm.xml文件格式如下
// 项目坐标
<groupId>org.example</groupId>
<artifactId>Maven</artifactId>
<version>1.0-SNAPSHOT</version>
// jdk版本
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
什么是Maven坐标
资源的唯一表示。坐标可以用来定义项目和引入第三方依赖
<groupId>org.example</groupId> // 定义当前maven项目隶属组织名称
<artifactId>Maven</artifactId> // 定义当前maven项目名称
<version>1.0-SNAPSHOT</version> // 定义当前版本号
依赖管理
依赖就是指项目运行中所需要的jar包,一个项目可以有多个依赖
依赖配置
导入第三方依赖(jar包)
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
...
</dependencies>
依赖传递
maven中的依赖具有传递性。如果a项目依赖b项目。我们在依赖a项目的时候会自动依赖b项目
上述例子中我们只依赖了一个项目但是同是会依赖他下面的所有项目
排除依赖
如果我们不需要某个依赖下的依赖我们可以排除
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
...
</exclusions>
</dependency>
...
</dependencies>
可以看到我们指定的依赖就被排除了
依赖范围
依赖默认可以在main,text,package文件下使用
我们可以通过scope来配置在什么环境下生效
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<scope>test</scope>
生命周期
maven的生命周期就是对所有maven构建项目过程的抽象
maven的生命周期是各自独立的
1. clean
清理工作
2. default
核心工作,比如编译,测试,打包,部署,安装...
3. site
生成报告,发布站点
clean: 移除上一次构建生成的文件(默认target文件)
compile:编译项目代码(默认target文件)
text:使用合适的单元进行测试(执行text文件)
package:将编译好的代码打包,jar/war...包(jar包打包到target文件下)
install:安装项目到本地仓库(将jar包安装到maven本地仓库中)
注意我们在执行某个指令,他之前的指令也会被执行。同上