前言:本文简单介绍了Maven的基本用法。学习Maven可以提高对Java项目的开发效率,解决对各种Jar包的管理问题,是一个强大的项目管理工具。
作用
- 项目构建:提供标准的、跨平台的自动化项目构建方式
- 依赖管理:方便快捷的管理项目依赖的资源(jar包)
- 统一开发结构:提供标准的、统一的项目结构
安装Maven
基础概念
仓库
- 仓库:用于存储资源,包含各种jar包
- 仓库分类
- 本地仓库
- 远程仓库
- 私服的作用
- 保存具有版权的资源,包含购买或自主研发的jar
- 中央仓库的jar包都是开源的,不能存储具有版权的资源
- 一定范围内共享资源,仅对内部开放,不对外共享
- 保存具有版权的资源,包含购买或自主研发的jar
坐标
用于描述仓库中资源的位置
坐标主要组成:
- groupld:定义当前Maven项目隶属组织名称(通常是域名反写)
- artifactld:定义当前Maven项目名称(通常是模块名称)
- version:定义当前项目版本号
- packaging:定义该项目的打包方式
作用:使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
仓库配置
配置本地仓库
找到Maven的安装目录,找到{Maven_Path}\conf\settings.xml
,将文件里面的localRepository
修改为自己设置的本地仓库
<localRepository>自定义仓库路径</localRepository>
配置镜像仓库
<mirrors>
<!-- 阿里云远程仓库 -->
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
全局setting与用户setting区别
- 全局setting定义了当前计算机中Maven的公共配置(
{Maven_Path}\conf\settings.xml
) - 用户setting定义了当前用户的配置(
{localRepository_Path\settings.xml
}与Repository文件夹同级)
第一个Maven项目(手工制作)
Maven项目构建命令
mvn compile # 编译
mvn clean # 清理
mvn test # 测试
mvn package # 打包
mvn install # 安装到本地仓库
插件创建工程
创建工程模板
mvn archetype:generate
-Dgrould={project-packaging}
-Dartifactld={project-name}
-DarchetypeArtifactld=maven-archetype-quickstart
-DinteractiveMode=false
创建java工程
mvn archetype:generate
-Dgrould={project-packaging}
-Dartifactld={project-name}
-DarchetypeArtifactld=maven-archetype-quickstart
-Dversion=0.0.1-snapshot
-DinteractiveMode=false
创建web工程
mvn archetype:generate
-Dgrould={project-packaging}
-Dartifactld={project-name}
-DarchetypeArtifactld=maven-archetype-webapp
-Dversion=0.0.1-snapshot
-DinteractiveMode=false
第一个Maven项目(IDEA制作)
依赖管理
依赖配置
查询jar包:Maven官方仓库
依赖指当前项目运行所需的jar,一个项目可以设置多个依赖
<!-- 设置当前项目所依赖的所有jar -->
<dependencies>
<!-- 设置具体依赖 -->
<dependency>
<!-- 依赖所属群组id -->
<groupld></groupld>
<!-- 依赖所属项目id -->
<artifactld></artifactld>
<!-- 依赖版本号 -->
<version></version>
</dependency>
</dependencies>
依赖传递
依赖具有传递性
直接依赖:在当前项目中通过依赖配置建立的依赖关系
间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
可选依赖(不透明)
可选依赖指对外隐藏当前所依赖的资源——不透明
<dependencies>
<dependency>
<groupld></groupld>
<artifactld></artifactld>
<version></version>
<!-- 可选依赖 -->
<optional>true</optional>
</dependency>
</dependencies>
排除依赖(不需要)
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要
<dependencies>
<dependency>
<groupld></groupld>
<artifactld></artifactld>
<version></version>
<!-- 设置当前项目所排除依赖的所有jar -->
<exclusions>
<!-- 设置具体排除依赖 -->
<exclusion>
<groupld></groupld>
<artifactld></artifactld>
</exclusion>
</exclusions>
</dependency>
</dependencies>
依赖范围
依赖的jar默认期刊可以在如何地方使用,可以通过scope标签设定其作用范围
作用范围:
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包(package指令范围内)