文章目录
一 初识Maven
1.1 什么是Maven
Maven项目对象模型(POM:Project Object Model),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
1.2 Maven的目标
Maven的主要目标是允许开发人员在最短的时间内理解开发工作的完整状态。为了达到这个目标,下面是Maven尝试解决的问题:
- 使编译过程更简单
- 提供统一的编译系统
- 提供优质工程信息
- 提供最佳实践开发指南
- 允许透明地迁移到新特性
上述内容翻译自官网,
举个例子,来看一下Maven的优势
开发一个项目,我们需要引用各种jar包,尤其是比较大的工程,引用的jar包往往有几十个乃至上百个,每用到一种jar包,都需要手动引入工程目录,而且经常遇到各种jar包和版本冲突的问题。maven只需要一个简答的pom.xml文件即可解决上述问题!
1.3 项目的一键构建
我们的项目,往往都要经历编译、测试、运行、打包、安装、部署等一系列过程。
构建:指的是项目从编译、测试、运行、打包、安装、部署整个过程都交给Maven进行管理,这个过程成为构建
一键构建:指的是整个构建过程,使用maven一个命令就可以轻松完成整个工作!
二 Maven的使用
2.1 Maven的安装
请参考:maven的安装
2.2 Maven的仓库
Maven中的仓库库包含构建工件和各种类型的依赖项。
Maven的工作需要从仓库下载一些jar包,如下图所示,本地的项目A、项目B等都会通过maven软件从远程仓库(可以理解为互联网上的仓库)下载jar包并存在本地仓库,本地仓库 就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。
下图描述了Maven中仓库的类型:
- 远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网内。
- 中央仓库 :在maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。
- 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找默认本地仓库位置在
${user.dir}/.m2/repository,${user.dir}
表示windows用户目录。
2.2.1 Maven本地仓库配置
配置文件在安装目录下F:\maven\conf
,找到settings.xml
找到<localRepository></localRepository>
标签,设置的内容为放置我们所需构件(主要为第三方jar包)的路径。下图是我的设置路径
打开这个目录看一下:
这个jar包是之前项目开发使用过得,并且缓存到了本地仓库
2.2.2 全局setting和用户setting
maven仓库地址、私服等配置信息需要在setting.xml文件中配置,分为全局配置和用户配置。
在maven安装目录下的有 conf/setting.xml文件,此setting.xml文件用于maven的所有project项目,它作为maven的全局配置。
如需要个性配置则需要在用户配置中设置,用户配置的setting.xml文件默认的位置在:${user.dir} /.m2/settings.xml
目录中,${user.dir}
指windows 中的用户目录。
maven会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。
2.3 Maven的POM文件
POM(Project Object Model,项目对象模型)是Maven工程的基本单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建、声明项目依赖等等。
指向任务或目标时,Maven会在的当前目录中查找POM。它读取POM,获取所需的配置信息,然后执行目标。
如:
<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>
<!--项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型 -->
<packaging>jar</packaging>
<!--该元素描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。要获取更多信息,请看项目依赖机制。 -->
<dependencies>
<dependency>
</dependency>
</dependencies>
</project>
关于pom文件个标签的详细解释参考:https://www.runoob.com/maven/maven-pom.html
2.4 Maven 构建生命周期
一个典型的Maven构建的生命周期由以下几个阶段的序列组成:
- validate:验证项目。验证项目是否正确且所有必须信息是可用的
- compile:执行编译。源代码编译在此阶段完成
- test:测试。使用适当的单元测试框架运行测试
- package:打包。创建JAR/WAR包
- verify:检查。对集成测试的结果进行检查,以保证质量达标
- install:安装。安装打包的项目到本地仓库,以供其他项目使用
- deploy:部署。复制最终的工程包到远程仓库中,以共享给其他开发人员与工程
默认的生命周期,还有三个标准: - clean:项目清理的处理
- site:项目站点文档创建
关于maven构建的生命周期详解请参考:
https://www.runoob.com/maven/maven-build-life-cycle.html
2.5 Maven的插件
Maven有以下三个标准的生命周期:
- clean:项目清理的处理
- default:项目部署的处理
- site:项目站点文档创建的处理
每个生命周期中都包含着一系列的阶段(phase)。这些 phase 就相当于 Maven 提供的统一的接口,然后这些 phase 的实现由 Maven 的插件来完成。
我们在输入 mvn 命令的时候 比如 mvn clean
,clean 对应的就是 Clean 生命周期中的 clean 阶段。但是 clean 的具体操作是由 maven-clean-plugin 来实现的。
Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来:
- 创建jar文件
- 创建war文件
- 编译代码文件
- 代码单元测试
- 创建工程文档
- 创建工程报告
在IDEA中一个简单的Maven项目的插件!
参考:
https://www.runoob.com/maven/maven-tutorial.html
http://maven.apache.org/guides/getting-started/index.html