依赖管理——依赖配置、依赖传递、依赖传递的冲突问题、可选依赖、排除依赖、依赖的范围(详细)

本文详细介绍了Maven项目的依赖配置、依赖传递、依赖冲突解决、可选依赖、排除依赖以及依赖范围的概念和实践方法。通过实例展示了如何管理项目间的依赖关系,包括如何设置依赖、排除不需要的依赖以及调整依赖范围,确保项目的正常运行和构建。
摘要由CSDN通过智能技术生成

一、依赖配置

依赖指当前项目运行所需的jar,一个项目可以设置多个依赖。

格式: <dependencies>标签中,可以添加多个依赖 (配置完成之后,记得刷新一下,就不用像以前那样copyjar包了)

<!--  设置工程的所有依赖-->
  <dependencies>
<!--    具体的依赖-->
    <dependency>
<!--   依赖所属群组id -->
      <groupId>junit</groupId>
<!--   依赖所属的项目id -->
      <artifactId>junit</artifactId>
<!--  依赖版本号  -->
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

怎么将项目1作为一个资源配置到项目2中?

依然采取上述的格式

复制项目1中的内容:

  <groupId>org.example</groupId>
  <artifactId>java01</artifactId>
  <version>1.0-SNAPSHOT</version>

粘贴到项目2中:

<!--  设置工程的所有依赖-->
  <dependencies>
<!--    具体的依赖-->
    <dependency>
<!--      这三个标签,和上面同-->
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
      <dependency>
          <groupId>org.example</groupId>
          <artifactId>java01</artifactId>
          <version>1.0-SNAPSHOT</version>
      </dependency>
  </dependencies>

此时便完成了我们所需要的操作

二、依赖传递

比如上面的项目1和项目2,项目1作为资源加入到项目2中,如果我们此时为项目1配置一个新的jar包,而不给项目2手动配置,项目2也会有这个jar包资源的,这就是依赖传递。

   直接依赖:在当前项目中,通过依赖配置建立的依赖关系

   间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源

  在此说明一下,直接依赖和间接依赖是相对来说的。

三、依赖传递的冲突问题

   路径优先:当依赖中出现相同的资源的时候,层级越深,优先级越低(1度覆盖2度....)

   声明优先:当资源在相同层级被依赖的时候,配置顺序靠前的覆盖配置顺序靠后的     

  (比如都是在2度的资源,这时候无法看路径优先,这是我们就看这两个都是2度的资源的上一级1度的资源是谁先配置的,。我们用先配置的1度资源下的2度资源)

   特殊优先:当同级配置了相同资源不同版本,后配置的覆盖先配置的(类似java代码,从上往下执行)

四、可选依赖

   可选依赖指对外隐藏当前所依赖的资源--不透明

还是用上面的项目1和项目2举例,项目1作为资源加入到项目2当中,此时在项目2中可以看到项目1中的依赖,现在我们要求,项目2中看不到项目1中的所选依赖,要怎么做?

很简单,只需要将项目1中的依赖再加上一个<optional>标签即可,写上 true,此时在项目2中就无法查看项目1中的依赖


  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
     <optional>true</optional>
    </dependency>
  </dependencies>

五、排除依赖

  排除依赖指主动断开依赖的资源,被排除的资源无需指定版本

如:在项目2中排除项目1中的资源

  在项目2的pom.xml下的项目1的配置中,添加<exclusions>标签,在里面添加<groupId><artifactId>,不需要添加版本号

   此时项目2就将项目1的此资源移除了

<!--  设置工程的所有依赖-->
  <dependencies>
<!--    具体的依赖-->
    <dependency>
<!--      这三个标签,和上面同-->
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>

      <dependency>
          <groupId>org.example</groupId>
          <artifactId>java02</artifactId>
          <version>1.0-SNAPSHOT</version>
          <exclusions>
              <exclusion>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
  </dependencies>

六、依赖的范围

依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围

 作用范围 : ①主程序范围有效 (main文件夹范围内)

                      ②测试程序范围有效(test文件夹范围内)

                      ③是否参与打包(package指令范围内,就是打包的时候,这个jar包要不要打进去)

(Y表示此时可以使用)

七、依赖范围的传递性

        带有依赖范围的资源在进行传递的时候,作用范围将收到影响

(把间接依赖理解为项目1,直接依赖理解为项目2,将项目2当做资源配置到项目1中)   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱布朗熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值