由于Http Client是独立于Java开发环境的第三方库/项目,所以要使用到Maven工程,通过添加依赖的方式获取对应的jar包文件。以下对Maven进行介绍。
1 Maven项目的标准结构
Maven项目的标准结构如下图1-1所示,
其中,
①项目名称为:a-maven-project;
②项目描述文件/配置文件:pom.xml;
③存放Java源码的目录:src/main/java;存放资源文件的目录:src/main/resources;
④存放测试源码的目录:src/test/java;存放测试资源的目录:src/test/resources;
⑤存放编译打包生成的文件的目录:target。
如下为使用IDEA创建的Maven项目,
2 Maven POM
POM(Project Object Model),项目对象模型,是Maven工程的基本工作单元,本质上是一个XML文件,包含了整个项目的基本信息,用于描述项目如何构成,声明依赖项等。其内容类似于图2-1,
其中,
①groupId:是工程组的唯一标识。例如:一个银行组织com.companyname.project-group拥有所有和银行相关的项目;
②artifactId:工程的唯一标识,通常是该工程的名称。例如:银行组织这个工程组com.companyname.project-group下存在一个消费者银行-customer-banking的工程。此时,groupId和artifactId就一起定义了消费者银行这个工程在仓库中的位置;
③version:工程的版本号,用于区分工程的不同版本。例如:
这样,一个Maven工程就可以由groupId,artifactId和version唯一标识。同时,在引用其他第三方库的时候,也是通过这3个变量确定,例如:依赖commons-logging在pom.xml文件中的配置信息为,
3 Maven作用-依赖管理
在Maven的管理体系中,各个项目组成了一个复杂的关系网,从理论上来说,每个独立的项目都可以相互依赖。这种依赖关系主要可分为3种:依赖、继承、聚合。
(1)依赖管理概述
使用Maven的一个好处就是:只要在pom文件中声明了所需要的jar包A,它就可以从Maven仓库中自动导入A.jar,并判断出A.jar依赖的其它jar包并将其导入。这样,就避免了通过手动管理这些依赖时需要自行判断jar包之间的依赖时可能出现的失误。
例如,当在pom.xml文件中声明一个spring-boot-starter-web依赖时,Maven会自动解析并判断最终需要的其它依赖。
(2)Maven坐标
在(1)中已经说明,在创建好的Maven项目中引用第三方库文件(添加依赖)时候,需要在pom.xml文件中,通过坐标来添加相应的说明。
坐标是实质上就是一系列标签对,包括:groupId、artifactId、version、packaging、classifier。其中groupId、artifactId、version3个是必须定义的,packaging是可选的,classifier不能直接定义。下面对其进行详细介绍,
①groupId:Maven项目组的唯一标识,用于定位当前Maven隶属的实际项目。要注意的是:Maven项目和实际项目之间不一定是一对一的关系。比如Spark实际项目会有很多子模块,比如:spark-core,spark-sql,spark-mllib等,这些子模块也是一个Maven项目。
②artifactId:Maven项目/工程的唯一标识,用于定位实际项目组中的某一个Maven项目。
③version:从不同版本的多个Maven项目中,标识具有特定版本号的那一个。
④packaging:定义Maven项目的打包方式。默认为jar。
⑤classifier:该标签帮助定义构建一些附属构建。
(3)Maven依赖[if !supportFootnotes][1][endif]关系
Maven项目之间可以相互依赖,依赖关系主要可以分为:依赖、继承、聚合。
①依赖关系。它是最常用的一种,即:当前Maven项目需要依赖其它项目(或者说引用其它Maven项目),主要通过在pom.xml文件中添加坐标文件实现。例如,添加对测试单元的依赖。
[if !supportFootnotes]
[endif]
[if !supportFootnotes][1][endif]Maven坐标和依赖:可参见https://www.jianshu.com/p/41fc988e7b44。
Maven认为,程序对外部的依赖会随着程序所处阶段和应用场景而变化,所以在Maven项目中添加依赖时,常常需要对其作用域(scope)进行限制。在maven中,scope包含的取值如下,
②继承关系和聚合关系的介绍。
详见https://www.jianshu.com/p/6a91e6c787a3。
4 Maven镜像
除了可以从Maven的中央仓库下载第三方库之外,还可以从Maven的镜像仓库下载。
※在使用阿里云提供的Maven镜像仓库时,需要对其进行配置,配置方法为:在用户主目录下进入.m2目录,创建一个settings.xml配置文件,内容为:
5 Maven在项目中的应用
在软件开发中,把一个大项目拆分为多个模块是降低软件复杂度的有效方法。例如,
对于Maven项目来说,原来是一个大项目,
现在可以拆分为3个模块,如下图所示,
项目拆分为多个子项目之后,只需要在单个子项目的pom.xml文件中添加相应的依赖即可。详细例子可参见https://www.liaoxuefeng.com/wiki/1252599548343744/1309301243117601。