5.项目关系之依赖、继承、聚合 [深入篇]

本文详细探讨了Maven项目中的依赖管理,包括如何添加依赖、依赖的范围与classpath关系、依赖的传递性及如何排除不想要的传递性依赖。此外,还介绍了依赖版本的界限设定。同时,文章还讲解了Maven项目的继承概念,通过设置父项目类型为pom,简化子项目版本升级。最后,阐述了聚合特性,强调高内聚、低耦合的设计原则,并展示了如何创建聚合父项目及子模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 项目关系

上面讲依赖是入门,下面讲依赖是深入了解,除了了解依赖还有继承和聚合

1.Maven的依赖

1.1 添加依赖

在Maven中需要使用在dependencies中定义一个或者多个dependency元素,来声明项目的一个或者多个依赖。

每个依赖元素dependency包括:

https://i-blog.csdnimg.cn/blog_migrate/20137bd3fea00bf3896636e0d5589982.png

例如:为项目添加junit测试的jar包,可以按如下方式定义

<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/maven-v4_0_0.xsd " >

      <modelVersion>4.0.0</modelVersion>

      <groupId>com.fz</groupId>

      <artifactId>ShiroTest</artifactId>

      <packaging>war</packaging>

      <version>0.0.1-SNAPSHOT</version>

      <name>ShiroTest Maven Webapp</name>

      <url> http://maven.apache.org </url>

      <dependencies>

          <dependency>

              <groupId>junit</groupId>

              <artifactId>junit</artifactId>

              <version>4.11</version>

              <!--不声明依赖范围scope,默认是compile-->

              <scope>test</scope>

          </dependency>

      </dependencies>

 </project>

1.2 依赖范围(sope)

<dependency>
    <!-- 
    compile(默认):编译范围的依赖,它在编译和打包的时候都会把该依赖打包进去
    test:测试依赖范围,它在编译和打包的时候都不会把该依赖打包进去
    provided:在编译和测试范围有效,最后生成war包时不会打包进去。
    runtime:运行时依赖,编译的时候不依赖。
    system:系统依赖范围
   import:导入依赖范围
     -->
    <scope></scope>
</dependency>

 

 

依赖范围与classpath的关系

1.3 依赖的传递性

在Maven中一个依赖不仅仅是一个JAR。它是一个POM文件,这个POM可能也声明了对其它构件的依赖。这些依赖的依赖叫做传递性依赖

所谓传递性依赖就是: 如果项目A依赖于项目B,项目B自身依赖于项目C,那么项目A它也依赖于项目C的依赖。

这种依赖是基于compile这个范围进行依赖

哪个依赖的顺序在前面就依赖哪个

如果路径的长短不一致,就选择最小路径

user-dao中的log4j路径:user-dao=====>user-core=====>log4j1.2.17

user-log中的log4j路径:user-log=====>log4j1.2.16

可见user-log的log4j路径要短一些,所以这里是1.2.16

假如我不想依赖user-coreuser-log两个模块中的log4j呢?

那就自己再添加一个dependency试试。

https://i-blog.csdnimg.cn/blog_migrate/12d490d9ea2d1b0398ddc3b8a52b19da.png

可以看出Maven会优先依赖自己定义的那个dependeny

1.2.2 通过exclusions元素排除不想要的传递性依赖

以上的问题可以通过更改相应的顺序来确定依赖的版本,当然也可以使用依赖的排除功能。来精确的控制所使用的版本。

排除依赖:就是将该模块中的**jar包给移除掉。

例如:以下的情况肯定是使用了user-log的log4j版本,因为它的顺序在前面。假如现在不想通过调整顺序来改版本那就可以使用排除依赖。

https://i-blog.csdnimg.cn/blog_migrate/e934fb32b01a68adcf81a35fd49a2ce9.png

排除依赖是在dependency元素下的exclusions元素,例如:我们把user-log中的log4j排除掉,那就只能去user-core中找log4j了

https://i-blog.csdnimg.cn/blog_migrate/0e5174dea379b034acd4a216f1e3c0ed.png

可以看出虽然user-log写在了上面,但是通过exclusion还是会把该模块中的log4j给排除掉。

1.4 依赖版本的界限

在依赖某个项目的时候,你可以不必指定特定的某个版本。也可以指定一个版本范围

(,) 不包含

[,] 包含

例如:依赖一个Junit的大于等于3.8 但是小于4.0 的版本

    <dependency>

        <groupId>junit</groupId>

        <artifactId>junit</artifactId>

        <version>[3.8,4.0)</version>

    </dependency>

 

修改pom.xml

2.继承

父项目类型:pom

父项目mvn-03——pom.xml

 

 

子项目mvn-04——pom.xml

假设我们要升级版本,只需升级父项目的版本即可。

3.聚合

高内聚、低耦合

创建聚合父项目-类型为pom

创建子模块

 

 

查看物理磁盘,发现不在外面,而在一个项目里面,eclipse却是单独一个项目存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值