Maven
Maven 是一款用于管理和构建Java项目的工具 主要特性有
- 依赖管理
- 项目构建
- 统一项目结构
依赖管理
1). 使用maven前
我们项目中要想使用某一个jar包,就需要把这个jar包从官方网站下载下来,然后再导入到项目中。然后在这个项目中,就可以使用这个jar包了。
2). 使用maven后
当使用maven进行项目依赖(jar包)管理,则很方便的可以解决这个问题。 我们只需要在maven项目的pom.xml文件中,比如说需要用到mybatis技术栈
java
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
在maven项目的配置文件中,加入上面这么一段配置信息之后,maven会自动的根据配置信息的描述,去下载对应的依赖。 然后在项目中,就可以直接使用了。
项目构建
Maven还提供了标准化的跨平台的自动化构建方式。
在maven中 提供了一套系统的规定来帮助我们构建项目 编译 测试 打包 发布
通过Maven中的命令,就可以很方便的完成项目的编译(compile)、测试(test)、打包(package)、发布(deploy) 等操作。
而且这些操作都是跨平台的,也就是说无论你是Windows系统,还是Linux系统,还是Mac系统,这些命令都是支持的。
统一项目结构
Maven 还提供了标准、统一的项目结构 意味着,无论我们使用的是什么开发工具,只要是基于maven构建的java项目,最终的目录结构都是相同的,如图所示。 那这样呢,我们使用Eclipse、MyEclipse、IDEA创建的maven项目,就可以在各个开发工具直接直接导入使用了,更加方便、快捷。
main目录下存放的是项目的源代码,test目录下存放的是项目的测试代码。 而无论是在main还是在test下,都有两个目录,一个是java,用来存放源代码文件;另一个是resources,用来存放配置文件。
Maven就是一款管理和构建java项目的工具。
Maven模型
- 项目对象模型 (Project Object Model)
- 依赖管理模型(Dependency)
- 构建生命周期/阶段(Build lifecycle & phases)
Maven仓库
仓库:用于存储资源,管理各种jar包
仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(就是jar包)和插件
Maven仓库分为:
- 本地仓库:自己计算机上的一个目录(用来存储jar包)
- 中央仓库:由Maven团队维护的全球唯一的。仓库地址:https://repo1.maven.org/maven2/
- 远程仓库(私服):一般由公司团队搭建的私有仓库
当项目中使用坐标引入对应依赖jar包后,
- 首先会查找本地仓库中是否有对应的jar包
- 如果有,则在项目直接引用
- 如果没有,则去中央仓库中下载对应的jar包到本地仓库
- 如果还可以搭建远程仓库(私服),将来jar包的查找顺序则变为: 本地仓库 --> 远程仓库--> 中央仓库
pom文件详解
POM (Project Object Model) :指的是项目对象模型,用来描述当前的maven项目。
java
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- Spring Boot 启动父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
<relativePath/>
</parent>
<groupId>com.rabbiter.sms</groupId>
<artifactId>student-score-backend</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>StudentManagerSystemApi</name>
<description>Demo project for Spring Boot</description>
<properties>
<mybatis-spring-boot>1.2.0</mybatis-spring-boot>
<mysql-connector>5.1.39</mysql-connector>
<java.version>1.8</java.version>
</properties>
</project>
pom文件详解:
<project>
:pom文件的根标签,表示当前maven项目<modelVersion>
:声明项目描述遵循哪一个POM模型版本- 虽然模型本身的版本很少改变,但它仍然是必不可少的。目前POM模型版本是4.0.0
- 坐标 :
<groupId>
<artifactId>
<version>
- 定位项目在本地仓库中的位置,由以上三个标签组成一个坐标
<maven.compiler.source>
:编译JDK的版本<maven.compiler.target>
:运行JDK的版本<project.build.sourceEncoding>
: 设置项目的字符集
Maven坐标
什么是坐标?
- Maven中的坐标是资源的唯一标识 , 通过该坐标可以唯一定位资源位置
- 使用坐标来定义项目或引入项目中需要的依赖
Maven坐标主要组成:
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
- artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
- version:定义当前项目版本号
- SNAPSHOT: 功能不稳定、尚处于开发中的版本,即快照版本
- RELEASE: 功能趋于稳定、当前更新停止,可以用于发行的版本
java
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
依赖管理
- 基本配置
依赖:指当前项目运行所需要的jar包。一个项目中可以引入多个依赖:
例如:在当前工程中,我们需要用到logback来记录日志,此时就可以在maven工程的pom.xml文件中,引入logback的依赖。具体步骤如下:
-
在pom.xml中编写
<dependencies>
标签 -
在
<dependencies>
标签中使用<dependency>
引入坐标 -
定义坐标的
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>6.1.4</version> </dependency> </dependencies>groupId
、artifactId
、version
-
点击刷新按钮,引入最新加入的坐标
刷新依赖:保证每一次引入新的依赖,或者修改现有的依赖配置,都可以加入最新的坐标
排除依赖 指主动断开依赖的资源,被排除的资源无需指定版本。
引入需要排除的依赖
生命周期
Maven的生命周期就是为了对所有的构建过程进行抽象和统一。 描述了一次项目构建,经历哪些阶段。Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完美的,易扩展的项目构建生命周期。这个生命周期包含了项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成等几乎所有构建步骤。
- clean:清理工作。
- default:核心工作。如:编译、测试、打包、安装、部署等。
- site:生成报告、发布站点等。
每套生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。
我们看到这三套生命周期,里面有很多很多的阶段,这么多生命周期阶段,其实我们常用的并不多,主要关注以下几个:
- clean:移除上一次构建生成的文件
- compile:编译项目源代码
- test:使用合适的单元测试框架运行测试(junit)
- package:将编译后的文件打包,如:jar、war等
- install:安装项目到本地仓库
Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际工作。在Maven的设计中,实际任务(如源代码编译)都交由插件来完成。
IDEA工具为了方便程序员使用maven生命周期,在右侧的maven工具栏中,已给出快速访问通道。
- 生命周期的顺序是:
clean
-->validate
-->compile
-->test
-->package
-->verify
-->install
-->site
-->deploy
- 我们需要关注的就是:
clean
-->compile
-->test
-->package
-->install
**说明:**在同一套生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行。
运行package生命周期时 clean不会运行,compile会运行。 因为compile与package属于同一套生命周期,而clean与package不属于同一套生命周期。
在日常开发中,当我们要执行指定的生命周期时,有两种执行方式:
- 在idea工具右侧的maven工具栏中,选择对应的生命周期,双击执行
- 在DOS命令行中,通过maven命令执行