- 仓库
- 仓库镜像
- 构件
- 构件的三维坐标
- POM - 项目对象模型
- 生命周期
- 插件
- Archetype - 项目模板
仓库
本地存储库
你自己电脑上的存储库,即 settings.xml 配置文件中配置的 <localRepository> 目录中央存储库
http://search.maven.org/
此地址只是Maven的jar包搜索界面,真正下载jar包的库地址并不是这个私服库(Nexus)
依赖(jar包)下载流程
搭建在我们自己服务器中的仓库,俗称“私服库”
当我们建立一个Maven项目后,Maven会检查pom.xml文件,来确定哪些依赖(jar包)需要下载
首先,Maven会从本地存储库中搜索资源,如果没有找到,则从私服库中寻找资源,私服库中也没有的时候,
则去中央仓库寻找资源,找到后先下载到私服库,再从私服库下载到我们本地存储库,这样项目就可以找到依赖了
</br>
仓库镜像
仓库镜像可以理解为一种代理,因为“你懂得”原因,中国访问远在国外的中央服务器会受限制,所以国内出现了很多中央仓库的镜像,其中阿里的Maven仓库镜像使用的最为频繁。
这个仓库镜像就是我们在 settings.xml 中配置的 <mirror> 节点
但是我们没有配置阿里的镜像,而是配置的我们公司自己 Nexus 私服的镜像地址,因为我们公司自己的构件不允许上传到第三方仓库,所以我们在阿里的镜像之前加了一层私服库,而且这样能大大提高jar包的下载速度,因为只要别人使用过一次的构件,你再使用的时候,就是直接从公司内网下载了。
</br>
构件
构件可以粗暴的理解为 “项目中的依赖”、“jar 包”
构件根据用途可以分为两类:
-
被其他构件依赖的构件
比如我们项目中引用第三方 jar 包,声明在 pom.xml 中<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> <version>1.0</version> </dependency> </dependencies>
插件(plugin)
这是一种特殊的构件,我们使用的所有的 mvn 命令都是插件
</br>
构件的三维坐标
如果我们要为项目引入MyBatis的相关jar包,我们该怎么办呢?
正确的做法是在 pom.xml 文件中声明我们要使用的依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
这样我们就可以在代码中使用MyBatis了,那么这些 jar 包是怎么找到的呢?就是通过这个构件的三维坐标,所谓的三维坐标就是上面声明中的两个id,一个版本号:
- groupId
项目组织唯一标识符,如:com.anhry、com.anhry.fsajj - artifactId
项目或者工程唯一标识符,如:fsajj-web、fsajj-utils - version
构件版本号,如:1.0.0-releases
</br>
POM - 项目对象模型
POM是项目对象模型,也就是项目基础目录下的 pom.xml 这个XML文件,它是Maven项目工作的基石,所有的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>
<groupId>com.anhry.cloud</groupId>
<artifactId>cloud-parent</artifactId>
<version>1.0</version>
<project>
</br>
插件
Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的。Maven 插件通常用于:
- 创建 jar 文件
- 创建 war 文件
- 编译代码文件
- 进行代码单元测试
- 创建项目文档
- 创建项目报告
- ......
一个插件通常提供了一组目标,可使用以下语法来执行:
mvn [plugin-name]:[goal-name]
例如,一个 Java 项目可以使用 Maven 编译器插件来编译目标,通过运行以下命令编译
mvn compiler:compile
</br>
Archetype - 项目模板
maven 使用 Archetype 概念为用户提供不同类型的项目模板,它是一个非常大的列表(614个数字)。 maven 使用下面的命令来帮助用户快速开始构建一个新的 Java 项目:
mvn archetype:generate
输入了此命令之后,命令行会列出一个多达1000多个的模板列表,此时会提示你输入一个数字,代表你想以哪个模板为基础创建项目,输入数字后会提示你输入三维坐标,然后完成。
所以,我们一般不会使用命令行来选择模板的方式来创建项目,我们都是使用 IDE 开发工具来创建项目。
命令行方式依旧强大无比,但是除非你对 Maven 的命令方式特别熟练,否则不建议新手直接使用命令行方式来操作,可以借助命令行方式提高你对Maven原理的理解。