Maven
简介
-
Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。
依赖管理
-
方便快捷的管理项目的依赖资源(jar包),避免版本冲突
配置
-
依赖: 指当前项目运行所需要的(jar包)
-
在pom.xml 中编写<dependencies> 标签
-
在<dependencies> 标签 使用<dependency>引入坐标
-
GroupId(组ID)
-
ArtifactId(工件ID)
-
Version(版本号)
-
<!-- 这是Maven项目中的dependencies标签,用于定义项目的所有依赖关系 --> <dependencies> <!-- 下面定义了一个具体的依赖项 --> <dependency> <!-- groupId定义了依赖的组织或团体,这里是阿里巴巴集团 --> <groupId>com.alibaba</groupId> <!-- artifactId定义了具体的构件或库名,这里是Druid针对Spring Boot的启动器 --> <artifactId>druid-spring-boot-starter</artifactId> <!-- version指定了该依赖的版本号,使用的是1.2.4 --> <version>1.2.4</version> </dependency> <!-- dependencies标签结束,所有项目的依赖关系定义完毕 --> </dependencies>
统一项目结构
-
提供标准统一的项目结构
项目构建
-
标准跨平台(Linux, Windows, MacOS)的自动化项目构建方式
-
清理 编译 测试 打包 发布
####
向已有项目添加maven模块
文件 -> 新建 -> 新模块
新建maven项目
导入maven项目
方式1
方式2
安装
-
官网下载--安装
-
配置本地仓库 :修改 conf/settings.xml 配置文件 中的 <localRepository>
<localRepository>"本地仓库位置"</localRepository> <!-- 大概在55 行左右-->
-
建议配置 阿里云私服 :修改conf/setting.xml文件 中的<mirrors>
<mirrors> <!--在这个标签中添加一下代码 --> <!-- 阿里云仓库 --> <mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/repositories/central/</url> </mirror> </mirrors>
Maven坐标
Maven坐标系统是Apache Maven构建工具用于唯一标识项目及其依赖的重要概念。这一系统确保了项目构建过程中的依赖解析、项目部署等操作能够准确无误地进行。
坐标组成
-
GroupId(组ID):这是项目组织的唯一标识符,通常采用倒置的域名表示,如
com.example
。它定义了项目的归属,有助于区分不同组织或个人的项目。 -
ArtifactId(工件ID):代表实际项目或依赖库的名称,是Maven项目的基本命名。例如,一个项目名为
my-project
,则其artifactId
即为my-project
。 -
Version(版本号):指定项目的特定版本,如
1.0.0
。版本号对于管理项目依赖的升级、兼容性检查至关重要。
作用
-
唯一标识:Maven坐标为每个项目或依赖库提供了一个全球唯一的地址,确保了在大型项目或依赖网络中能够精确地定位资源。
-
依赖管理:基于坐标,Maven能自动下载和管理项目所需的全部依赖,简化了构建过程。
-
仓库定位:坐标也是Maven在本地仓库、远程仓库中查找和存储项目构件或依赖的标准路径。
实例
<!-- 这是Maven项目中的dependencies标签,用于定义项目的所有依赖关系 -->
<dependencies>
<!-- 下面定义了一个具体的依赖项 -->
<dependency>
<!-- groupId定义了依赖的组织或团体,这里是阿里巴巴集团 -->
<groupId>com.alibaba</groupId>
<!-- artifactId定义了具体的构件或库名,这里是Druid针对Spring Boot的启动器 -->
<artifactId>druid-spring-boot-starter</artifactId>
<!-- version指定了该依赖的版本号,使用的是1.2.4 -->
<version>1.2.4</version>
</dependency>
<!-- dependencies标签结束,所有项目的依赖关系定义完毕 -->
</dependencies>
依赖传递
-
直接依赖: 当前项目中通过配置建立的依赖关系
-
间接依赖: 直接依赖的资源,也依赖了其他资源,那么当前项目也间接的依赖了这个资源
排除依赖
-
主动断开某间接依赖,被断开的资源无须指定版本
<!-- 在Maven的依赖声明中,这是一个特定的依赖项配置 --> <dependency> <!-- groupId: 定义了依赖的组织或公司名称,xx_0 是一个占位符,实际使用时应替换为具体的组织ID --> <groupId>xx_0</groupId> <!-- artifactId: 指定了依赖库或模块的名称,xx_1 同样是占位符,应替换为实际的库名 --> <artifactId>xx_1</artifactId> <!-- version: 表明该依赖的具体版本号,xx_2 需要替换为实际版本字符串 --> <version>xx_2</version> <!-- exclusions 标签用于排除传递性依赖,即不希望引入某些由当前依赖自动带来的其他依赖 --> <exclusions> <!-- 在此标签内,可以定义一个或多个exclusion子标签来排除特定的依赖 --> <exclusion> <!-- 被排除依赖的groupId --> <groupId>xx</groupId> <!-- 被排除依赖的artifactId --> <artifactId>xx</artifactId> </exclusion> <!-- 如果有其他依赖需要排除,可以继续添加exclusion标签 --> </exclusions> </dependency>
依赖范围
-
靠<scope>标签来指定范围
范围(Scope) | 主程序(Main) | 测试程序(Test) | 打包(Package) | 范例 |
---|---|---|---|---|
compile(编译范围 默认) | 是 | 是 | 是 | log4j |
test(测试范围) | 否 | 是 | 否 | junit |
provided(已提供范围) | 是 | 是 | 否 | servlet-api |
runtime(运行时范围) | 否 | 否 | 是 | jdbc驱动 |
<!-- 这是Maven项目中的dependencies标签,用于定义项目的所有依赖关系 -->
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.4</version>
<scope>test</scope> <!-- 设置了依赖的范围为test范围 -->
</dependency>
</dependencies>
三套独立生命周期
注
当执行某个阶段时会执行所有在它前面的阶段
clean: 清理工作
clean
生命周期负责清理项目,即删除之前构建生成的文件。它确保下一次构建从干净的状态开始。clean
生命周期包含以下阶段:
-
pre-clean
: 执行一些清理前的准备工作。 -
clean: 清理上一次构建生成的文件。 ------常用
-
post-clean
: 执行一些清理后的收尾工作。
default: 核心工作
default
生命周期是Maven的核心生命周期,负责项目的编译、测试、打包等。这是实际构建项目的生命周期,包含了许多阶段,例如:
-
validate
: 验证项目是否正确,所有必要的信息都是可用的。 -
compile
: 编译项目的源代码。 ------常用 -
test
: 使用适当的单元测试框架运行测试,这些测试不应要求代码被打包或部署。------常用 -
package
: 打包编译后的代码,在打包之前,通常会进行一些预处理操作,如编译和测试。------常用 -
verify
: 对集成测试的结果进行检查,以确保质量达标。 -
install
: 将包安装到本地仓库,以供其他项目使用。------常用 -
deploy
: 在构建环境中完成,将最终的包复制到远程仓库以共享给其他开发者和项目。
site: 生成报告
site
生命周期负责生成项目的站点文档,包括项目信息、报告和维基页面等。site
生命周期包含以下阶段:
-
pre-site
: 在生成项目站点之前执行一些准备工作。 -
site
: 生成项目的站点文档。 -
post-site
: 执行一些生成站点后的收尾工作。 -
site-deploy
: 将生成的站点发布到服务器上。