如何使用 maven?
目录
一个可以用于构建和管理任何基于Java的项目的工具。使Java开发人员的日常工作变得更加轻松,并且有助于理解任何基于Java的项目。
maven 的主要目标是允许开发人员在最短的时间内理解开发工作的完整状态。
一、安装
Apache Maven的安装是一个简单的过程,提取档案并将带有
mvn命令的bin文件夹添加到PATH中。
1. 下载
https://maven.apache.org/download.cgi
2. 安装
解压下载文件到指定目录:
个人习惯:
windown:
D:/develop/maven/
mac:
~/develp/maven/
3. 配置环境变量
linux:
PATH=/usr/local/maven/apache-maven-3.6.3/bin:$PATH
windown:
1. 配置M2_HOME
M2_HOME=D:\develop\maven\apache-maven-3.6.0
2. 配置PATH
PATH=%M2_HOME%\bin
4. 验证
$ mvn -v
二、基本配置
1. maven 仓库配置
<!-- 本地仓库配置 -->
<localRepository>/path/to/local/repo</localRepository>
<!-- 中央仓库镜像配置 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<!-- 私服仓库配置(填写公司的maven仓库) -->
2. jdk 版本配置
<profile>
<id>jdk18</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
三、生命周期
- validate:验证项目是否正确并且所有必要的信息均可用
- compile:编译项目的源代码
- test:使用合适的单元测试框架测试编译后的源代码。这些测试不应要求将代码打包或部署
- package:采用编译后的代码并将其打包为可分发格式,例如JAR。
- integration-test:如有必要,将程序包处理并部署到可以运行集成测试的环境中
- verify:运行任何检查以验证包装是否有效并符合质量标准
- install:将软件包安装到本地存储库中,以作为本地其他项目中的依赖项
- deploy:在集成或发布环境中完成,将最终程序包复制到远程存储库,以便与其他开发人员和项目共享。
除了以上,还有两个生命周期:
-
clean:清理由先前版本创建的工件
-
site:生成此项目的站点文档
四、依赖管理
1. maven 坐标
用于定位 maven 项目的参数
groupId:公司名称倒写
artifactId: 项目名称
version:版本号
2. 引入外部依赖
<dependency>
<groupId>公司名称倒写</groupId>
<artifactId>项目名称</artifactId>
<version>版本号</version>
</dependency>
3. 依赖冲突
依赖依存关系:
1.就近原则
冲突解决:
1.指定版本号
2.排除依赖版本号
依赖范围:
compile:默认,会传播依赖
provided:具有此作用域的依赖项将添加到用于编译和测试的类路径中,而不是运行时类路径中。它不是可传递的。
runtime:此范围表明依赖关系不是编译所必需的,而是执行所必需的。Maven在运行时和测试类路径中包含具有此作用域的依赖项,但不包括编译类路径。
test:仅在测试编译和执行阶段可用。此范围不是可传递的
system:此范围类似于,provided除了必须提供显式包含它的JAR之外。该工件始终可用,并且不会在存储库中查找。
import:仅pom在本<dependencyManagement>节中的类型依赖项上支持此作用域。它指示将在指定的POM<dependencyManagement>部分中将依赖关系替换为有效的依赖关系列表。由于已替换它们,因此范围为的依赖项import实际上不会参与限制依赖项的可传递性。
五、聚合工程
父项目配置:
<modules>
<module>{子项目artifactId}</module>
</modules>
子项目配置:
<parent>
<artifactId>{父项目artifactId}</artifactId>
<groupId>{父项目groupId}</groupId>
<version>{父项目version}</version>
</parent>

浙公网安备 33010602011771号