前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Maven官网文档】Optional & Exclusion Maven中的可选依赖和依赖性排除

【Maven官网文档】Optional & Exclusion Maven中的可选依赖和依赖性排除

作者头像
青山师
发布2023-05-05 18:58:30
4680
发布2023-05-05 18:58:30
举报
文章被收录于专栏:IT当时语_青山师_JAVA技术栈

本节介绍Maven中的可选依赖和依赖性排除功能。 【原文链接】

Optional 依赖

如果明确一个 project 无论出于什么原因考虑都不可能继续分割成子项目,则其依赖可以使用 optional。 如果其他 project 依赖了 使用 optional 的 project, 则他们需要自主选择该依赖,亦即是说,该 optional 依赖不会通过传递性依赖传递给上层的 project。

为什么要使用 optional 依赖?

如果是为了节省内存空间大可不必如此选择optional依赖。原因是,使用一个 project,控制其依赖list是很重要的,因为这些依赖最后可能都会打包成 war、jar 等等,可能会违反许可协议或者引起类路径问题。

如何使用 optional 依赖?

在你的 dependency 中将属性 <optional>设置为true即可。projectA的依赖如下:

代码语言:javascript
复制
<project>
  ...
  <dependencies>
    <!-- 声明设置为optional的依赖项 -->
    <dependency>
      <groupId>sample.ProjectB</groupId>
      <artifactId>Project-B</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <optional>true</optional> <!-- 仅仅支持true、false -->
    </dependency>
  </dependencies>
</project>

optional 是怎么工作的?

代码语言:javascript
复制
Project-A -> Project-B

上面的这幅图表示了,projetA依赖于projectB, 且 projectB的设置为依赖可选项为true。

代码语言:javascript
复制
Project-X -> Project-A

假如现在有另一个peojectX依赖于projectA 时,optional 设置就生效了,你会发现 projectX 并没有依赖于 projectB,你必须直接在 projectX 的pom中依赖 projectB。 也就是在以下的依赖链中:

代码语言:javascript
复制
Project-X -> Project-A -> Project-B

Project-B 失去了传递依赖性。

Exclusions 依赖

Maven 是解决依赖关系的,在你的项目类路径中可能包含不必要的依赖。例如,你所依赖的项目可能并没有正确的声明他们的依赖。为了解决这个情况,maven 2.x 包含了显示排除依赖的概念exclusion。 Exclusions 用于排除在你的pom中的某个指定的依赖,当你build你的project时,这个依赖不会打包到你的类路径下。

如何使用 exclusion依赖?

代码语言:javascript
复制
<project>
  ...
  <dependencies>
    <dependency>
      <groupId>sample.ProjectA</groupId>
      <artifactId>Project-A</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>  <!-- 声明排除依赖 -->
          <groupId>sample.ProjectB</groupId>
          <artifactId>Project-B</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>
  </dependencies>
</project>

ProjectX 依赖于 ProjectA, ProjectA 依赖于ProjectB,在 ProjectX 的pom中将ProjectA的dependency中添加ProjectB的排除依赖。这样ProjectB就不会在构建的时候打包到ProjectX的类路径中的。

要完成此功能一样的效果,你也可以在ProjectA中将ProjectB的optional设置为true。

Optional 和 Exclusions 依赖的总结

  • Optional 是保证依赖向上不扩散
  • Exclusions 是排除依赖的子(孙…)依赖关系
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Optional 依赖
    • 为什么要使用 optional 依赖?
      • 如何使用 optional 依赖?
        • optional 是怎么工作的?
        • Exclusions 依赖
          • 如何使用 exclusion依赖?
          • Optional 和 Exclusions 依赖的总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档