参考文章:maven到底是个啥玩意~
What is Maven?
Maven 是 Apache 下的一个纯 Java 开发的开源项目,简单来说是一个项目管理工具,核心功能是合理叙述项目间的依赖关系。
Maven java项目结构
simple
---pom.xml 核心配置,项目根下
---src
---main
---java java源码目录
---resources java配置文件目录
---test
---java 测试源码目录
---resources 测试配置目录
图中有一个target目录,是因为将该java项目进行了编译,src/main/java下的源代码就会编译成.class文件放入target目录中,target就是输出目录。
POM.xml
POM.xml( Project Object Model,项目对象模型 ) 是Maven工程的基本工作单元,用于描述项目如何构建,声明项目依赖,等等。执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包。
所有 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>
节点 | 描述 |
---|---|
project | 工程的根标签。 |
modelVersion | 模型版本需要设置为 4.0。 |
groupId | 这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织com.companyname.project-group 拥有所有的和银行相关的项目。 |
artifactId | 这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。 |
version | 这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。 |
如何通过pom.xml文件获取到想要的jar包?
为什么通过groupId、artifactId、version三个属性就能定位一个jar包?
加入上面的pom.xml文件属于A项目,那么A项目肯定是一个maven项目,通过上面这三个属性能够找到junit对应版本的jar包,那么junit项目肯定也是一个maven项目,junit的maven项目中的pom.xml文件就会有三个标识符,比如像下图这样,然后别的maven项目就能通过这三个属性来找到junit项目的jar包了。所以,在每个创建的maven项目时都会要求写上这三个属性值的。如何获得groupId这些字段呢?
一般而言,如果官方项目支持Maven,在其页面一般会有一段依赖字段以供复制,但也确实存在支持Maven但没有给出依赖字段的情况。而另一些项目的Maven特性由第三方维护,此时从官方渠道获得对Maven的支持比较困难。
因此,查询依赖字段首选的方案,是使用Maven搜索服务进行搜索。这里推荐一个地址:mvnrepository.com
Maven 仓库
通过pom.xml中的配置,就能够获取到想要的jar包(还没讲解如何配置先需要了解一下仓库的概念),但是这些jar是在哪里呢?就是我们从哪里获取到的这些jar包?答案就是仓库。仓库有三类:
- 本地仓库 (local)
- 远程仓库 (remote)
2.1 中央仓库 (默认的远程仓库)
2.2 私服 (一般是公司内部自己设置的) - 其他公共库 (e.g. 阿里云的仓库)
获取jar包时,优先从本地仓库查找,如果本地仓库中没有且配置了私服的话,就从私服中找,如果还没有就从中央仓库中获取,并下载到本地仓库。