hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

Maven optional关键字透辟图解

2019-11-18杂谈搜奇网17°c
A+ A-

写在前面

本来想写一篇「如何自定义Spring Boot Starter」,然则为了更好邃晓 Starter 的一些设想理念和个中的症结点,所以提早将一些细节内容零丁提取出来解说申明

在 Maven pom.xml 中,你常常会看到依靠项中有相似下面的代码:

<dependency>
  <groupId>sample.ProjectA</groupId>
  <artifactId>Project-A</artifactId>
  <version>1.0</version>
  <scope>compile</scope>
  <optional>true</optional> 
</dependency>

这里的 <optional>true</optional> 是什么意义呢?

optional 症结字的奥妙

老例子,画个图申明题目:

由于 project C 运用到了两个来自 project A 的类 (OptionalFeatureAClass) 和 project B 的类 (OptionalFeatureBClass). 假如 project C 没有依靠 packageA 和 packageB,那末编译将会失利。

project D 依靠 project C,然则关于 project D 来讲,类 (OptionalFeatureAClass) 和类 (OptionalFeatureBClass) 是可选的特征,所以为了让终究的 war/ejb package 不包括不必要的依靠,运用<optional> 声明当前依靠是可选的, 默许情况下也不会被其他项目继承(比方 Java 中的 final 类,不能被其他类继承一样)

假如 project D 确切须要用到 project C 中的 OptionalFeatureAClass 怎么办呢?那我们就须要在 project D 的 pom.xml 中显式的增加声明 project A 依靠,继承看下图:

Project D 须要用到 Project A 的 OptionalFeatureAClass,那末须要在 Project D 的 pom.xml 文件中显式的增加对 Project A 的依靠

到这也就很好邃晓为何 Maven 为何要设想 optional 症结字了,假定一个关于数据库耐久化的项目(Project C), 为了适配更多范例的数据库耐久化设想,比方 Mysql 耐久化设想(Project A) 和 Oracle 耐久化设想(Project B),当我们的项目(Project D) 要用的 Project C 的耐久化设想,不可能既引入 mysql 驱动又引入 oracle 驱动吧,所以我们要显式的指定一个,就是这个道理了

现实案例

在 spring-boot-actuator pom.xml 文件中,有凌驾 20 个依靠是 optional

由于 Spring Boot 不可能将没必要的依靠也打包到你终究的 jar package 中,所以用到 spring boot actuator 的项目终究生成的 jar package 中不会包括这 20 多个依靠 jar,假如你要用到哪个,显式的到场到你的项目就好了

在接下来的文章,自定义 Spring Boot Starter 也是这个战略,由于 starter 是包括特定功能为其他项目效劳用的,相似本文的 Project C 的角色了,到这里你邃晓 optional 的奥妙了吗?

反向运用

假如 Project C 引入的依靠没有加 <optional>true</optional>,Project D 又须要依靠 Project C,但只用到 Project A 的类怎么办呢?Maven 也是有解决办法的,运用 exclusion 症结字,不多说,上一段代码就懂了:

<dependencies>
    <dependency>
      <groupId>top.dayarch.demo</groupId>
      <artifactId>Project-C</artifactId>
      <exclusions>
        <exclusion>
          <groupId>top.dayarch.demo</groupId>
          <artifactId>Project-B</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>
</dependencies>

总结

到这里,在你以后设想功能性依靠时,你应当邃晓如何设想依靠关系了, 我这里引荐运用 optional 的情势,简朴来讲,你设想的依靠什么菜都有,想吃什么菜本身 "抱蔡明" 就好,接下来我们就模仿官方规范建立自定义的 starter...... 博客 接见恢复一般,迎接交换

魂魄诘问

  1. 有许多童鞋项目组用的构建东西时 Gradle,你晓得 Gradle 中是如何示意的吗?
  2. 自定义 starter,你晓得官方规范 starter 的构造是什么样的吗?

进步效力东西

迎接延续关注民众号:「日拱一兵」

  • 前沿 Java 手艺干货分享
  • 高效东西汇总 | 复兴「东西」
  • 口试题目剖析与解答
  • 手艺材料领取 | 复兴「材料」

以读侦探小说头脑轻松意见意义进修 Java 手艺栈相干学问,本着将复杂题目简朴化,笼统题目具体化和图形化准绳逐渐剖析手艺题目,手艺延续更新,请延续关注......

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
Maven optional关键字透辟图解

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282297.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>