Maven基础
Maven基础
学习使用工具
黑马2023新版Java视频教程 https://www.bilibili.com/video/BV1Fv4y1q7ZH?p=8&vd_source=03da0cdb826d78c565cd22a83928f4c2
Java程序员进阶之路 https://tobebetterjavaer.com/overview/java-can-do-what.html
黑马程序员Maven全套教程 https://www.bilibili.com/video/BV1Ah411S7ZE/?vd_source=03da0cdb826d78c565cd22a83928f4c2
Maven菜鸟教程 https://www.runoob.com/maven/maven-pom.html
Maven生命周期和插件 https://segmentfault.com/a/1190000021364596
零、jar包与war包
- JAR(Java Archive,Java 归档文件):类的归档文件,java的类进行编译生成的class文件打包的压缩包。
- WAR:是一个Web应用程序。包含Web应用程序的所有内容。它减少了传输文件所需要的时间。
一、Maven简介
传统项目管理中会出现jar包不统一,jar包不兼容,工程升级维护过程操作繁琐等问题。Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。Maven的优点主要有以下三点:
- 依赖管理:Maven 能帮助我们解决软件包依赖的管理问题,不再需要提交大量的 jar 包、引入第三方库;
- 规范目录结构:Maven 标准的目录结构有助于项目构建的标准化,通过配置 profile 还可以根据不同的环境(开发环境、测试环境,生产环境)读取不同的配置文件;
- 方便集成:能够集成在 IDE 中更方便使用。
二、Maven基础概念与配置文件
- 仓库:用于存储资源,包含各种jar包。
- 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
- 远程资源:非本机电脑上的仓库,为本地仓库提供资源
- 中央仓库:Maven团队维护,存储所有资源的仓库
- 私服:部门/公司范围内存储自愿的仓库,从中央仓库获取资源
- 坐标:用于描述仓库中资源位置。使用唯一标识。
- groupID:定义当前Maven项目隶属组织名称
- artifactID:定义当前Maven项目名称
- version:定义当前项目版本号
- packaging:定义该项目的打包方式
Maven 是基于 POM(Project Object Model) 进行的,项目的所有配置都会放在 pom.xml 文件中,包括项目的类型、名字,依赖关系,插件定制等。执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
所有 POM 文件都需要 project 元素和三个必需字段:groupId,artifactId,version。
<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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>project</artifactId>
<!-- 版本号 -->
<version>1.0</version>
</project>
三、Maven的生命周期与插件
-
maven的生命周期
maven的生命周期就是为了对所有的构建过程进行抽象和统一。包含了项目的
清理
、初始化
、编译
、测试
、打包
、集成测试
、验证
、部署
和站点生成
等几乎所有构建步骤。几乎所有的项目构建,都能映射到这样一个生命周期上。maven包含三套相互独立的生命周期。每个生命周期内部包含
多个阶段
(phase)。这些阶段是有序
的。后面
的阶段依赖
于前面
的阶段。当执行某个阶段的时候,会先执行它前面的阶段。用户和maven最直接的交互就是调用这些生命周期阶段。clean
生命周期:用于清理项目。default
生命周期:用于构建项目。site
生命周期:用于建立项目站点。
-
maven插件
maven的核心仅仅定义了抽象的生命周期,具体的任务交给插件完成。每套生命周期包含多个阶段,每个阶段执行什么操作,都由插件完成。
插件以独立的构件形式存在。为了能够复用代码,每个插件包含多个功能。插件中的每个功能就叫做插件的目标(Plugin Goal),每个插件中可能包含一个或者多个插件目标(Plugin Goal)。
maven生命周期的阶段与插件目标绑定,以完成某个具体的构件任务。
- 比如项目编译这个任务,对应了
default生命周期
阶段的compile阶段
,而maven-compiler-plugin
插件的compile目标
能够完成该任务,因此将他们进行绑定,实现项目编译任务。
生命周期阶段与插件进行绑定后,可以通过
mvn 阶段
来执行和这个阶段绑定的插件目标。为了让用户几乎不用任何配置就能构建maven项目,maven为一些主要的生命周期阶段绑定好了插件目标,当我们通过命令调用生命周期阶段时,绑定的插件目标就会执行对应的任务。也可以通过自定义绑定自己选择将某个插件目标绑定到生命周期的某个阶段上,使得maven项目在构建过程中执行更多更富特色的任务。
- 比如项目编译这个任务,对应了
四、依赖管理
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。
一种相当常见的情况,比如说 A 依赖于其他库 B。如果,另外一个项目 C 想要使用 A ,那么 C 项目也需要使用库 B。Maven 可以避免去搜索所有所需库的需求。Maven 通过读取项目文件(pom.xml),找出它们项目之间的依赖关系。我们需要做的只是在每个项目的 pom 中定义好直接的依赖关系。