Maven依赖管理
1. 依赖配置
-
依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。
-
配置:
- 在
pom.xml
中编写<dependencies>
标签 - 在
<dependencies>
标签中 使用<dependency>
引入坐标 - 定义坐标的
groupId,artifactId,version
- 点击刷新按钮,引入最新加入的坐标
- 在
-
注意:
-
如果引入的依赖,在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖。(这个过程会比较耗时,耐心等待)
-
如果不知道依赖的坐标信息,可以到https://mvnrepository.com/中搜索。
-
2. 依赖传递
- 依赖具有传递性:
直接依赖:
-
在当前项目中通过依赖配置建立的依赖关系
间接依赖:
-
如果被依赖的资源还依赖其他资源,当前项目间接依赖其他资源
实验:
(1) 直接依赖
(2) 间接依赖
排除依赖:
-
主动断开依赖的资源,被排除的资源无需指定版本。
3. 依赖范围
- 依赖的jar包,默认情况下,可以在任何地方使用。可以通过
<scope>…</scope>
设置其作用范围。 - 作用范围:
- 主程序范围有效。(main文件夹范围内)
- 测试程序范围有效。(test文件夹范围内)
- 是否参与打包运行。(package指令范围内)
scope值 | 主程序 | 测试程序 | 打包(运行) | 范例 |
---|---|---|---|---|
compile(默认) | Y | Y | Y | log4j |
test | - | Y | - | junit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc驱动 |
(1)compile(默认)
- 可以在任何地方使用(开发中常用):
- pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 项目坐标(项目描述信息) -->
<groupId>com.app</groupId>
<artifactId>maven-project01</artifactId>
<version>1.0-SNAPSHOT</version>
<name>maven-project01</name>
<url>http://maven.apache.org</url>
<!-- 配置 -->
<properties>
<!-- 当前项目源码当中所使用的jdk版本 -->
<maven.compiler.source>11</maven.compiler.source>
<!-- 当前项目打包时所使用的jdk版本 -->
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<!-- 打包插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
(2)test
-
只能在测试程序中有效:
(3)provided
- 可以在主程序和测试程序中有效:验证方式与前面一样。
(4)runtime
- 可以在测试程序和打包中有效:验证方式与前面一样
4. 生命周期
(1)介绍
- Maven的
生命周期
就是为了对所有的maven项目构建过程进行抽象和统一。
-
Maven中有3套相互独立的生命周期:
- clean:清理工作。
- default:核心工作,如:编译、测试、打包、安装、部署等。
- site:生成报告、发布站点等。
-
每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。别看到那么多就慌了,常用的也就是标红的这5个生命周期。
(2)阶段
-
生命周期阶段:
- clean:移除上一次构建生成的文件(如:.class字节码、jar包等一些文件)
- compile:编译项目源代码
- test:使用合适的单元测试框架运行测试(junit)
- package:将编译后的文件打包,如:jar、war等
- install:安装项目到本地仓库
-
注意:
- clean是属于clean那一套的生命周期;
- compile、test、package、install是属于default那一套的生命周期
- 在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行。
(3)执行生命周期
执行指定生命周期的两种方式:
① maven工具栏双击执行:
-
在idea中,右侧的maven工具栏,选中对应的生命周期,双击执行。
-
clean
-
compile
-
test
-
package
-
install
-
跳过某个生命周期:
-
② 命令执行:
-
在命令行中,通过命令执行。
(4)抽象概念
-
Maven的生命周期以及生命周期的各个阶段都是抽象的概念。
- 它并不是执行具体的操作,而是
由与其绑定的maven插件
来完成的,因为maven本身就是个插件执行框架。 - 因此所有的工作都是由插件来完成的。
- 它并不是执行具体的操作,而是
-
IDEA的Maven面板:
Lifecycle
:生命周期的各个阶段Plugins
:与生命周期各个阶段绑定的插件- 当双击Lifecycle中的各个阶段,在运行时最终是由Plugins中的插件来完成对应的工作的
(5)小结
- 重点关注maven生命周期的哪些阶段?
- clean:清理
- compile:编译
- test:测试
- package:打包
- install:安装
它并不是执行具体的操作,而是由与其绑定的maven插件
来完成的,因为maven本身就是个插件执行框架。
- 因此所有的工作都是由插件来完成的。
-
IDEA的Maven面板:
Lifecycle
:生命周期的各个阶段Plugins
:与生命周期各个阶段绑定的插件- 当双击Lifecycle中的各个阶段,在运行时最终是由Plugins中的插件来完成对应的工作的
(5)小结
- 重点关注maven生命周期的哪些阶段?
- clean:清理
- compile:编译
- test:测试
- package:打包
- install:安装