Maven 父文件的依赖 子文件不能接收_Maven--项目管理工具(三)

0933e5a497c286d81cb66b8cf9a5f3cc.png

【Maven】

☞Maven入门教程-Maven项目实战☜

十一、Maven项目之间的关系

1. 问题

目前我们可以使用Maven来创建项目,并且使用Maven来管理项目中的第三方的资源,同时当我们将项目的功能开发完成后,将自己的项目通过maven打包到本地仓库中,提供给其他项目使用,但是在该流程中存在以下的问题:

问题一:

项目A中根据开发需求,将代码根据功能进行了分层,例如使用MVC的分层思想,将项目A的代码分为了service层pojo层,mapper层等。那么在项目B中需要使用项目A已经开发好的功能,我们目前会使用Maven将整个项目A的资源全部打包放到本地仓库中,但是项目B需要使用的是项目A中的部分功能不是所有的功能,按照目前这种方式会造成项目B中引入的是项目A的整个资源,造成项目B在资源加载时效率过低,浪费资源。

总结:

打包项目整个项目打成一个包,造成资源使用不方便。

问题二:

我们使用Maven创建了三个项目,并且这三个项目,都在使用SSM的功能,那么我们就需要在三个项目的pom.xml文件都要引入SSM的资源坐标。后期如果我们需要升级SSM的资源的版本号或者需要在三个项目中都引入其他的资源时,我们需要同时修改三个pom文件,麻烦!

总结:

不同的maven项目会使用到相同的资源,造成资源修改麻烦。

2. 解决

2.1问题一的解决

打包项目的方式过于死板,打的是整个包。因为我们目前开发一个项目,会将项目所有的功能放在一个项目全部声明。而maven打包的基础单位是一个maven项目,也就说一个maven的project会被打成一个包。根据maven的打包规则,以及我们自己的项目功能对外提供的需求。我们需要在开发项目时,由以前在一个maven project中声明项 目的所有功能代码,变为在N个maven project中来完成项目功能的开发,每个maven project中声明一部分功能代码,但是当我们使用maven去运行 我们的项目时,maven会将N个project中的代码合并为一个项目。也就说在物理视图项目,一个项目的功能代码被拆分到N个项目中完成,在逻辑上这N个项目是一个项目。这样我们在使用Maven去打包项目的时候,maven 会将项目的N个project分别打包,最后打成N个包,其他人就可以根据自 己的需求来获取指定的资源使用了。

2.2问题二的解决

不同的项目之间使用相同的资源坐标,不好管理。我们将不同的项目中需要使用的相同的资源进行抽取,抽取为一个公共的配置然后让其他的项目呢都引用该功能配置即可。

3. 实现

  • 依赖关系
  • 继承关系
  • 聚合关系

十二、Maven项目之间的依赖关系

1. 依赖关系的介绍

项目A中会使用项目B中的资源,我们会将项目B的包导入到项目A中使用,那么项目A和项目B之间就是依赖关系。项目A依赖项目B。

2. Maven项目依赖关系的使用

  1. 创建项目A完成功能开发
  2. 在项目A的pom文件中配置项目B或者其他第三方资源的资源坐标
  3. 在项目A中正常调用项目B的资源即可。

3. Maven 依赖范围及依赖原则

3.1.依赖范围

在maven的pom.xml文件中 定义依赖除了 groupId ,artifactId,version三个必要的标签外,还见过另外一个标签scope(如下)。没错这个标签就是我下面要说的依赖范围。

<dependencies>
    

其实maven中的依赖范围有很多种,但是我们常用的只有以下三种,我们掌握这三种就够用了。他们分别是 compile (编译)范围依赖,test(测试)依赖,provided依赖。那问题来了我们在定义依赖的时候这个scope 该怎么填呢?我们先讲一下判定规则:

  • 是否参与部署是否对main主程序有效
  • 是否对test测试程序有效
  • 是否参与打包
  • 针对程序结构(分主程序和测试程序)的依赖

5b2fb610b78b010853a9afdab989e8f4.png

1dfc1c9fe4658c9311e295283f6cb0cd.png

74057efc4a440fe9846aa97f7cb1f1fe.png

3.2.依赖原则

● 路径不同间接依赖中maven采用的是路径最短者优先

● 路径相同间接依赖中maven 采用的是依赖定义顺序从上到下

4. 注意

在开发阶段,并且在同一个工作空间,不同的maven项目之间可以通过资源

坐标直接调用其资源,无需将其打包放到本地仓库中。但是在项目运行期间,必 须根据依赖关系的顺序依次打包,才能正常运行。比如A-->B--->C--->D

打包的顺序为先打包D再打包C再打包B再打包A。最简单的记忆方法,就是

不管是开发阶段还是运行阶段只要项目A依赖的其他项目都需要进行打包,其他 项目每修改依次就重新打包一次。

十三、Maven项目之间的继承关系

1. 继承关系的介绍

继承关系指的是两个事物之间的逻辑联系,比如在现实生活中的父子之间存在继承关系,具备继承关系的两个事物之间具备以下特点:

子拥有父的所有资源。子可以调用父的资源。

注意:

java基本语法中的继承是继承理论的一种应用。

2. maven项目中使用继承关系管理资源

项目A继承项目B,那么项目A就直接拥有项目B中的资源。资源指的是项目B通过pom文件获取的资源,不是项目B中的功能代码资源。也就说maven项目之间的继承是pom资源之间的继承,不是项目功能代码的继承。

3. maven项目中的继承关系的代码实现案例

3.1 创建两个maven项目,项目parent和项目child

b50b22bce474485dadef9083e5db8f06.png

3.2 建立两个项目之间的继承关系

在子项目中的pom.xml文件中使用parent标签,并声明父项目的资源坐标即可。

428c9b48d4c7ee9cc8529796360eec06.png

3.3 观察在父项目中配置资源,在子项目中是否会自动加载相关资源

0c904b4c278280965c9ac50438ac7819.png

4.继承关系中的父项目的作用

4.1 pom项目类型的介绍

在maven中使用继承关系主要目的是管理项目的公共资源的,在父项目中对公共资源可以统一的进行维护,子项目自然就发生了变更。基于这样的考虑在父项目中完全没有必须去声明功能代码的,所以在父项目中也就不需要声明功能代码的目录结构体系,只需要保留pom文件管理资源即可。那么也就说我们希望创建一个只做资源管理,不做功能开发的项目。所以maven专门提供了一个pom类型的项目,我们使用继承关系的父项目的类型为pom类型即可。

总结:

pom类型的项目只做资源管理,不做功能开发。在继承关系中父项目创建为pom类型比较合理。

4.2 pom类型项目的创建

先创建一个jar类型的项目,然后将目录结构删除,只保留pom文件然后在pom文件中使用packaging标签修改项目的类型为pom类型。

2e31c582ed4e88a7765a0b0984d970e0.png

5.注意

(1) maven项目的继承关系中的父项目要创建为pom类型

(2) 继承关系中的maven项目是相互独立的,本质就是两个项目比如项目A继承了项 目B,项目A和项目B的功能还是各自的功能,是独立只不过在项目A中可以拥 有项目B的第三方资源。项目B的所有子项目之 间也是相互独立的。

十四、Maven项目的聚合关系

1. 聚合关系介绍

依赖关系是A调用B中的功能资源。继承关系是A可以拥有B中的声明的资源。我们希望maven在将我们的项目进行打包上传本地仓库时,将项目根据功能拆分成不同的包上传,可以让其他人根据需求使用。但是maven打包是按照项目为基本单位打包的,那么也就说我们需要将一个本来在一个maven项目中声明的代码,拆分为N个项目声明,并且在运行的时候还会合并成一个项目。这N个项目之间的关系我们就成为聚合关系。

总结:

聚合关系:

将本来一个整体的事物,拆分为不同的零件。每个零件在物理视图上是独立的,也就说肉眼看到的是多个零件。但是在逻辑上这些零件是属于一个个体的。这些零件之间的关系就是聚合关系。

举例说明:

依赖关系

小明和小红是同事,小红负责将货物装车,小明负责开车。小明依赖小红,只有小红将获取装车完毕,小明才能开车。

继承关系

小明和老明是父子关系,老明突然有一天中了500万,小明呢这个时候正好要娶小红,直接从这500万中拿了100万买了个房子。小明在直接调用老明的资源。

聚合关系

小明在和小红婚后过去了美滋滋的小日子,但是突然有一天小明感到一丝丝的不舒服,去医院检查了一下是肺上有了功能问题,需要換肺。找到合适的器官源后,小明换了一个新的肺。小明的内脏器官之间是聚合的关系,都是隶属于小明的,并且每个器官都有自己的职责不同的器官的联合运行,撑起了小明的生命。

2. maven项目中使用聚合关系的流程

2.1 创建一个pom项目

2.2 记录子项目之间的逻辑关系。

统一管理项目的资源,每个子项目的pom文件的依赖的并集。

让子项目都继承该pom项目。

2.3 根据MVC的代码结构,将项目拆分,拆分为四个子项目

  1. pojo项目
  2. mapper项目
  3. service项目
  4. web项目

2.4 配置子项目之间的依赖关系

web-->service-->mapper--->pojo

总结:

我们在使用了聚合关系将项目拆分为N个子项目后,为了便于N个子项目的资源的统一,N个子项目继承同一个父项目。又因为N个子项目开发的是同一个功能,子项目之间又存在相互的调用,使用依赖关系来实现子项目之间的相互调用。

>>>学习交流群< < <课件,视频,项目,源码,你想要的这里都有

加群暗号“知乎”

风里雨里,我们等你~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值