maven

maven基础

maven介绍

maven是一个项目管理工具,主要是在项目开发阶段对Java项目进行依赖管理和项目构建。

项目构建:对Jar包的管理,通过导入maven坐标,就到入了相关的jar包

依赖管理:使用maven命令就可以完成项目的清理、编译、测试、报告、打包、部署

maven仓库类型

本地仓库

远程仓库

maven常用命令

  1. clean:清理编译生产的target文件
  2. compile:将源代码编译成字节码文件,并放在target/class下
  3. test:运行项目中的单元测试用例
  4. package:将项目打包成可分发的格式,JAR,WAR或者EAR等
  5. install:将项目打包并放在本地maven仓库

maven坐标书写规范

1
2
3
4
5
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>

maven的依赖范围

1
2
3
4
5
6
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
<scope>compile</scope>
</dependency>
  • compile:默认的作用范围,所有路径均有效
  • test:只在test路径有效
  • provided:编译测试需要,运行时不将其打包到最终部署包中
  • runtime:编译时不需要,运行时需要

maven的依赖传递

具体场景

A->B :A直接依赖B

B->C:B直接依赖C

那么A间接依赖C,引入依赖A时,依赖C的部分也会导入,可以多层传递

依赖冲突

当两个依赖导入时,两个依赖同时导入了相同的依赖,可是版本不一样

依赖冲突的解决

  1. maven提供的依赖调解原则
  • 第一声明者优先原则:以先导入的依赖版本为主
  • 路径近者优先原则:直接依赖优先于传递依赖
  1. 排除依赖:使用exclusions排除某个冲突的依赖
  2. 版本锁定:最多使用的方式

使用方式:

在dependencyManagement标签中锁定依赖的版本

在dependency标签中导入依赖,不需要指定version

分模块构建maven工程

当开发一个大型的项目时,可以将大型项目拆分为不同的工程

一般可以按照业务来拆分,也可以按照层来拆分

通过一个父工程来进行统一的管理和配置

maven继承

通过继承可以消除重复的代码,并对公共的部分做统一的配置与管理

先将父工程的打包方式改为pom,

然后添加子工程的的父工程

1
2
<!-- 父工程打包方式为 -->
<packaging>pom</packaging>

maven聚合

在maven的父工程pom文件中,使用modules标签,将所有的工程聚合到一起,对聚合的工程进行统一管理,可以进行统一的打包,清理等操作

maven第三方Jar包安装到本地

进入到需要安装的目录,执行以下命令

1
2
3
4
5
6
mvn install:intall-file
-Dfile = 包名
-DgroupId = 组织名
-DartifactId = 模块名
-Dversion = 版本
-Dpacking = 导入方式