Maven的概念和作用
Maven是什么?
- Maven 是一个项目管理工具。
Maven有什么用?
- Maven 可以对Java项目进行构建、依赖管理。
什么是构建(build)
- 构建是以源代码 (例如Java代码、配置文件) 为原材料,生产出可以运行的项目 (例如war包) 的过程。
Maven基本概念-仓库
- 仓库:用于存储资源,各种 jar 包。
- 仓库分类:
- 本地仓库:自己电脑上的仓储,从远程仓库获取资源
- 远程仓库:
- 中央仓库:Maven团队维护的仓库,包含所有开源资源
- 私服:公司或其他组织维护的仓库,包含从中央仓库获取的资源和内部资源
- 为什么要有私服?
- 提升本地资源获取速度,本地仓库直接从私服获取资源,不需要每次都请求中央仓库
- 保存内部资源
Maven基本概念-坐标
- Maven坐标的作用:用于描述资源在仓库中的位置,Maven根据坐标来定位资源
- Maven坐标的组成:
- groupId:组id,隶属的组织名称 (通常是域名反写,例如 com.jirengu )
- artifactId:项目名称 (例如 bank,hotel)
- version:版本号
- Maven仓库:mvnrepository.com/
仓库配置-Windows
- (1) 本地仓库配置
- 通常不需要配置,因为IDEA初次使用maven时,会在默认位置自动创建
- 默认本地仓库位置为 C:\Users\username.m2\repository,M2_HOME\conf\settings.xml 里配置仓库位置
- 如果要手动配置本地仓库,到 C:\Users\username\ 目录下输入 mvn 命令,创建一个空的本地仓库
- (2) 远程仓库配置
- 如果A仓库能提供B仓库的所有资源,那么可以认为A是B的镜像
- 配置镜像,加快资源获取速度
- 镜像不是私服,镜像也对外公开
- 修改 settings.xml 文件配置镜像
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
IDEA创建 Maven 工程
- 第一步:创建一个空项目
- 第二步:修改 IDEA Maven 配置
- 第三步:新建模块,选择 Maven,修改 groupId、artifactId
IDEA创建 Maven 工程 – 使用原型
- 非 web 项目,使用 quickstart 原型
- web 项目,使用 webapp 原型
Maven项目结构
- (1)非web项目
- (2)web项目
单元测试简单介绍
- 什么是单元测试(unit testing)?
对软件中的最小可测试单元进行检查和验证。最小可测试单元的大小或者范围很难界定,一般就是指对我们所写的方法进行功能测试。
- 为什么要进行单元测试?
单元测试是程序员对代码进行的自我检查。任何代码都有可能存在 bug(逻辑错误),单元测试可以帮助我们在开发时发现这些bug,尽可能避免在实际生产环境中出现bug。
pom.xml 配置文件的结构
- POM (Project Object Model),项目对象模型。
- Maven将项目开发和管理过程抽象成一个项目对象模型 (POM)。
- pom.xml 配置文件描述了项目的信息,Maven 通过加载 pom.xml 掌握项目信息。
- 一个基础的 pom.xml 文件结构可以分为3大块
- 基本信息
- 坐标配置
- 依赖配置
Maven项目构建与生命周期
什么是生命周期?
- 生命周期用来表示一个生物从出生到死亡的过程。
- 在软件开发领域,生命周期用来表示一个对象从创建到销毁的过程。
- Maven 用生命周期定义了项目构建和发布的过程,定义了生命周期包含哪些阶段。
Maven生命周期
- clean:项目清理
- pre-clean:执行一些需要在clean之前完成的工作
- clean:移除所有上一次构建生成的文件
- post-clean:执行一些需要在clean之后立刻完成的工作
- default (或 build) : 项目部署 (重点!!!)
- site : 项目站点文档创建的处理 (使用较少)
default 生命周期
Maven在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行
如何运行 Maven 生命周期
- 方法一:IDEA 侧边栏
- 方法二:命令行执行 mvn 命令。例如:
mvn clean package
- 方法三:配置 Configuration
Maven依赖管理
依赖配置
- 在标签下配置依赖
- 一个依赖配置一个
- 每个依赖配置都需要指定坐标
依赖传递
- 依赖具有传递性:
- 直接依赖:通过依赖配置直接建立的依赖关系
- 间接依赖:所依赖的资源依赖其他资源,当前项目间接依赖其他资源
对于 maven05,maven04 和 maven02 是直接依赖,maven03、maven 01、maven06 是间接依赖
依赖冲突
- 依赖冲突的概念:jar包之间的间接依赖,导致项目依赖同一种jar包的多个版本
- 当发生依赖冲突是会Maven会选择哪个版本 ?
- 路径优先:层级越浅,优先级越高
- 声明优先:层级相同时,配置顺序靠前的覆盖靠后的
- 同一个配置文件中:靠后的覆盖靠前的
发现依赖冲突
- 方法一:命令行输入命令 mvn -Dverbose dependency:tree
- 方法二:使用 IDEA 插件 Maven Helper (推荐)
解决依赖冲突
- 方法一:直接依赖正确版本的jar包。根据路径优先原则,直接依赖的层级最浅,使用的jar包版本一定是直接依赖的版本。
- 方法二:依赖排除。使用 exclusion 排除掉不希望存在的传递性依赖。
快照版本(SNAPSHOT) vs 正式版本(release)
- 快照版本号以 SNAPSHOT 结尾(例如 1.0-SNAPSHOT),是开发调试阶段使用的版本
- 开发阶段可能会进行快节奏的bug修复或改进,会需要频繁将资源发布到远程仓库
- 同一个快照版本可以多次发布到远程仓库,新的覆盖旧的。非快照版本版本号不能冲突。
- 资源依赖方如果使用的是快照版本,那么每次构建都会从自动获取最新快照
- 快照版本可以解决两个问题:
- 避免版本号爆炸
- 提升团队间开发合作效率
IDEA Maven 配置对新项目生效
- 在 IntelliJ IDEA -> Settings -> Build, Execution, Deployment -> Maven 中修改了 Maven 配置
- 但这么修改只对当前项目生效,新创建的项目仍然是默认的 Maven 配置
- 在修改对新项目生效,需要修改 File -> New Projects Setup -> Settings for New Projects 中的 Maven 配置
- 重启 IDEA (File -> Invalid Caches and restart),创建新工程
在 pom 文件中配置Java语言版本
- 默认是1.6,改成默认1.8
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>