Maven 学习
- 什么是Maven
- Maven的必要性:
由于 Java 的生态非常丰富,无论你想实现什么功能,都能找到对应的工具类,这些工具类都是以 jar 包的形式出现的,例如 Spring,SpringMVC、MyBatis、数据库驱动,等等,都是以 jar 包的形式出现的,jar 包之间会有关联,在使用一个依赖之前,还需要确定这个依赖所依赖的其他依赖,所以,当项目比较大的时候,依赖管理会变得非常麻烦臃肿,这是 Maven 解决的第一个问题。
Maven 还可以处理多模块项目。简单的项目,单模块分包处理即可,如果项目比较复杂,要做成多模块项目,例如一个电商项目有订单模块、会员模块、商品模块、支付模块...,一般来说,多模块项目,每一个模块无法独立运行,要多个模块合在一起,项目才可以运行,这个时候,借助 Maven 工具,可以实现项目的一键打包。
- Maven的两大核心:
- 依赖管理:对 jar 的统一管理(Maven 提供了一个 Maven 的中央仓库,https://mvnrepository.com/,当我们在项目中添加完依赖之后,Maven 会自动去中央仓库下载相关的依赖,并且解决依赖的依赖问题)
- 项目构建:对项目进行编译、测试、打包、部署、上传到私服等
- Maven坐标:
俗称 gav:使用下面三个向量子仓库中唯一定位一个 Maven 工程
在项目中的 pom.xml 文件中,我们可以看到下面gav的定义:
1、groupid:公司或组织域名倒序
<groupid>com.ys.maven</groupid>
2、artifactid:模块名,也是实际项目的名称
<artifactid>Maven_05</artifactid>
3、version:当前项目的版本
<version>0.0.1-SNAPSHOT</version>
groupId,artifactId和version:依赖的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖。
- Maven的group-Id:
Group-id分为三部分,每个部分以“.”相隔,第一部分是项目用途,比如用于商业的就是“com”,用于非盈利性质就是“org”,第二部分是公司名,比如“alibaba”,“jingdong”,第三部分是项目名。
Maven 的 文件目录结构:
bin binary二进制文件的简称,里面存放的一般是可执行的二进制文件
boot 里面存放启动目录的核心文件
conf 里面存放配置文件,包含核心全局配置文件settings.xml
lib 里面存放类库或者资源文件
- Maven 仓库:
仓库选址优先级:
本机仓库>setting.xml配置的镜像仓库>默认中央仓库
- Maven 依赖:
Maven依赖具有传递性
依赖范围
父工程可以通过pom.xml配置import属性结合dependencyManagement,强制规范子工程项目版本举例:
父类定义如下:
子类定义如下:
模块聚合:
总项目一般为pom项目(在 pom.xml 文件中设置)
在modules中添加模块
模块中定义如下:
IDEA中Maven指令含义
- clean命令
清除由项目编译创建的target
- validate命令
验证项目是否正确并且所有必要的信息均可用
- compile命令
编译项目的源代码
- test命令
使用合适的单元测试框架来测试编译的源代码。 这些测试不应要求将代码打包或部署
- verify命令
对集成测试的结果进行任何检查,以确保符合质量标准
- package命令
完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
- install命令
完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
- deploy命令
完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
package,install,deploy三者关联
- mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
- mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
- mvn clean deploy依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。
- site命令
用于为Maven项目生成站点(用以生成HTML页面的模块等文档)