(二)Maven工程与依赖添加

    由于Http Client是独立于Java开发环境的第三方库/项目,所以要使用到Maven工程,通过添加依赖的方式获取对应的jar包文件。以下对Maven进行介绍。

1 Maven项目的标准结构

    Maven项目的标准结构如下图1-1所示,

图1-1 Maven项目标准结构

    其中,

        ①项目名称为:a-maven-project

        ②项目描述文件/配置文件:pom.xml

        ③存放Java源码的目录:src/main/java;存放资源文件的目录:src/main/resources

        ④存放测试源码的目录:src/test/java;存放测试资源的目录:src/test/resources

        ⑤存放编译打包生成的文件的目录:target

    如下为使用IDEA创建的Maven项目,

图1-2 使用IDEA创建的Maven项目

2 Maven POM

    POM(Project Object Model),项目对象模型,是Maven工程的基本工作单元,本质上是一个XML文件,包含了整个项目的基本信息,用于描述项目如何构成,声明依赖项等。其内容类似于图2-1,

图2-1 pom.xml文件示例

    其中,

        ①groupId:是工程组的唯一标识。例如:一个银行组织com.companyname.project-group拥有所有和银行相关的项目;

        ②artifactId:工程的唯一标识,通常是该工程的名称。例如:银行组织这个工程组com.companyname.project-group下存在一个消费者银行-customer-banking的工程。此时,groupId和artifactId就一起定义了消费者银行这个工程在仓库中的位置;

        ③version:工程的版本号,用于区分工程的不同版本。例如:

图2-2 version版本号举例

    这样,一个Maven工程就可以由groupId,artifactIdversion唯一标识。同时,在引用其他第三方库的时候,也是通过这3个变量确定,例如:依赖commons-logging在pom.xml文件中的配置信息为,

图2-3 maven工程-引入第三方库的配置举例  

3 Maven作用-依赖管理

    在Maven的管理体系中,各个项目组成了一个复杂的关系网,从理论上来说,每个独立的项目都可以相互依赖。这种依赖关系主要可分为3种:依赖、继承、聚合

(1)依赖管理概述

        使用Maven的一个好处就是:只要在pom文件中声明了所需要的jarA,它就可以从Maven仓库中自动导入A.jar,并判断出A.jar依赖的其它jar包并将其导入。这样,就避免了通过手动管理这些依赖时需要自行判断jar包之间的依赖时可能出现的失误。

        例如,当在pom.xml文件中声明一个spring-boot-starter-web依赖时,Maven会自动解析并判断最终需要的其它依赖。

图3-1 引入spring-boot-starter-web 依赖

 

图3-2 Maven会将导入当前jar包依赖的的其它jar包

        (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文件中添加坐标文件实现。例如,添加对测试单元的依赖。

图3-3 通过在pom.xml中添加坐标引入依赖项目

[if !supportFootnotes]

[endif]

[if !supportFootnotes][1][endif]Maven坐标和依赖:可参见https://www.jianshu.com/p/41fc988e7b44。

        Maven认为,程序对外部的依赖会随着程序所处阶段和应用场景而变化,所以在Maven项目中添加依赖时,常常需要对其作用域(scope)进行限制。在maven中,scope包含的取值如下,

图3-4 Scope取值介绍

        ②继承关系和聚合关系的介绍

            详见https://www.jianshu.com/p/6a91e6c787a3。

4 Maven镜像

        除了可以从Maven的中央仓库下载第三方库之外,还可以从Maven的镜像仓库下载。

图4-1 Maven仓库源

        在使用阿里云提供的Maven镜像仓库时,需要对其进行配置,配置方法为:在用户主目录下进入.m2目录,创建一个settings.xml配置文件,内容为:

图4-2 settings.xml配置文件内容

5 Maven在项目中的应用

        在软件开发中,把一个大项目拆分为多个模块是降低软件复杂度的有效方法。例如,

图5-1 项目拆分示意图

        对于Maven项目来说,原来是一个大项目,

图5-2 原始大的Maven项目

        现在可以拆分为3个模块,如下图所示,

图5-3 原始项目拆分为小的项目

        项目拆分为多个子项目之后,只需要在单个子项目的pom.xml文件中添加相应的依赖即可。详细例子可参见https://www.liaoxuefeng.com/wiki/1252599548343744/1309301243117601。

你可能感兴趣的:((二)Maven工程与依赖添加)