定义
是一款用于管理和构建java项目的工具
作用
1. 依赖管理
2. 统一项目结构
3. 项目构建
项目目录结构
POM
项目对象模型 (Project Object Model)
POM (Project Object Model) :指的是项目对象模型,用来描述当前的maven项目。
仓库
本地仓库:自己计算机上的一个目录
中央仓库:由Maven团队维护的全球唯一的
远程仓库(私服):一般由公司团队搭建的私有仓库
使用
1.下载完maven后在目录中新建一个文件夹
2.进入到conf目录下修改settings.xml配置文件
1). 使用超级记事本软件,打开settings.xml文件,定位到53行
2). 复制<localRepository>标签,粘贴到注释的外面(55行)
3). 复制之前新建的用来存储jar包的路径,替换掉<localRepository>标签体内容
3.配置阿里云私服
进入到conf目录下修改settings.xml配置文件:
1). 使用超级记事本软件,打开settings.xml文件,定位到160行左右
2). 在<mirrors>标签下为其添加子标签<mirror>,内容如下:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
4.配置环境变量(两步)
打开cmd输入命令看是否安装成功
IDEA集成Maven
1.选择所有设置,就不用再一个一个配置。
2、设置IDEA使用本地安装的Maven,并修改配置文件及本地仓库路径
3、配置工程的编译版本为21(数字为你自己JDK的版本)
创建Maven项目
坐标
* Maven中的坐标是资源的唯一标识 , 通过该坐标可以唯一定位资源位置
* 使用坐标来定义项目或引入项目中需要的依赖
Maven坐标主要组成
* groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.lzy)
* artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
* version:定义当前项目版本号
导入maven项目
打开IDEA,选择右侧Maven面板,点击 + 号,选中对应项目的pom.xml文件,双击即可
依赖管理
依赖配置
1. 在pom.xml中编写<dependencies>标签
2. 在<dependencies>标签中使用<dependency>引入坐标
3. 定义坐标的 groupId、artifactId、version
4.记得点击刷新依赖按钮
<dependencies>
<!-- 第1个依赖 : logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
<!-- 第2个依赖 : junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
依赖传递
依赖具有传递性
- projectA依赖了projectB。对于projectA 来说,projectB 就是直接依赖。
- 而projectB依赖了projectC及其他jar包。 那么此时,在projectA中也会将projectC的依赖传递下来。对于projectA 来说,projectC就是间接依赖。
排除依赖:
<!--排除依赖, 主动断开依赖的资源-->
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
依赖范围
如果希望限制依赖的使用范围,可以通过<scope>标签设置其作用范围。
生命周期
三套生命周期
-
clean:清理工作。
-
default:核心工作。如:编译、测试、打包、安装、部署等。
-
site:生成报告、发布站点等。
主要关注以下几个:
• clean:移除上一次构建生成的文件
• compile:编译项目源代码
• test:使用合适的单元测试框架运行测试(junit)
• package:将编译后的文件打包,如:jar、war等
• install:安装项目到本地仓库
• deploy:打包项目到远程仓库(公司私服)
在同一套(注意有三套)生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行
高级内容
为什么要学高级:
如果我们需要开发一些中大型的项目,此时仅凭我们前面所学习的 Maven 的基础知识就比较难以应对了
1.分模块设计与开发
将一个 Java 项目拆分成多个模块进行开发
注意:分模块开发需要先针对模块功能进行设计,再进行编码。
作用:方便项目的管理维护、拓展,也方便模块键的相互调用、资源共享
2.继承与聚合
继承
为什么要继承:
如果是做一个大型的项目,多个模块当中重复的依赖可能会很多很多。如果每一个 Maven 模块里面,我们都来单独的配置一次,功能虽然能实现,但是配置是比较繁琐的。
解决方法:可以将各个子工程当中共有的这部分依赖,统一的定义在父工程 parent 当中,从而来简化子工程的依赖配置。
版本锁定
-
在父工程中所配置的
<dependencyManagement>
只能统一管理依赖版本,并不会将这个依赖直接引入进来。 这点和<dependencies>
是不同的。 -
子工程要使用这个依赖,还是需要引入的,只是此时就无需指定
<version>
版本号了,父工程统一管理。变更依赖版本,只需在父工程中统一变更。
父工程
<!--统一管理依赖版本-->
<dependencyManagement>
<dependencies>
<!--JWT令牌-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
</dependencies>
</dependencyManagement>
子工程
<dependencies>
<!--JWT令牌-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
</dependencies>
面试题:<dependencyManagement>
与 <dependencies>
的区别是什么?
-
<dependencies>
是直接依赖,在父工程配置了依赖,子工程会直接继承下来。 -
<dependencyManagement>
是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)
聚合
为什么要聚合?
如果开发一个大型项目,拆分的模块很多,模块之间的依赖关系错综复杂,那此时要进行项目的打包、安装操作,是非常繁琐的
通过maven的聚合就可以轻松实现项目的一键构建(清理、编译、测试、打包、安装等
代码实现,在父工程中写明要聚合的模块
<!--聚合其他模块-->
<modules>
<module>../tlias-pojo</module>
<module>../tlias-utils</module>
<module>../tlias-web-management</module>
</modules>
那此时,我们要进行编译、打包、安装操作,就无需在每一个模块上操作了。只需要在聚合工程上,统一进行操作就可以了。
继承与聚合对比
-
作用
-
聚合用于快速构建项目
-
继承用于简化依赖配置、统一管理依赖
-
-
相同点:
-
聚合与继承的pom.xml文件打包方式均为pom,通常将两种关系制作到同一个pom文件中
-
聚合与继承均属于设计型模块,并无实际的模块内容
-
-
不同点:
-
聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些
-
继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
-
3.私服
是什么:私服其实就是架设在公司局域网内部的一台服务器,就是一种特殊的远程仓库
作用:用于解决团队内部的资源共享与资源同步问题