最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Maven optional關鍵字透徹圖解

 更新時間:2019年11月05日 09:32:23   作者:日拱一兵  
這篇文章主要介紹了詳解Maven optional關鍵字透徹圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

寫在前面

本來想寫一篇「如何自定義Spring Boot Starter」,但是為了更好理解 Starter 的一些設計理念和其中的關鍵點,所以提前將一些細節(jié)內容單獨提取出來講解說明

在 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 關鍵字的奧秘

老規(guī)矩,畫個圖說明問題:

由于 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 依賴,繼續(xù)看下圖:

Project D 需要用到 Project A 的 OptionalFeatureAClass,那么需要在 Project D 的 pom.xml 文件中顯式的添加對 Project A 的依賴

到這也就很好理解為什么 Maven 為什么要設計 optional 關鍵字了,假設一個關于數(shù)據庫持久化的項目(Project C), 為了適配更多類型的數(shù)據庫持久化設計,比如 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 的形式,簡單來說,你設計的依賴什么菜都有,想吃什么菜自己 "抱蔡明" 就好,接下來我們就模擬官方標準創(chuàng)建自定義的 starter...... 博客 訪問恢復正常,歡迎交流

靈魂追問

  1. 有很多童鞋項目組用的構建工具時 Gradle,你知道 Gradle 中是怎樣表示的嗎?
  2. 自定義 starter,你知道官方標準 starter 的結構是什么樣的嗎?

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java HashMap實現(xiàn)原理分析(一)

    Java HashMap實現(xiàn)原理分析(一)

    這篇文章主要介紹了Java HashMap實現(xiàn)原理的分析,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-08-08
  • Spring Boot 文件上傳原理解析

    Spring Boot 文件上傳原理解析

    Spring Boot 文件上傳原理其實就是Spring MVC,因為這部分工作是Spring MVC做的而不是Spring Boot,那么,SpringMVC又是怎么處理文件上傳這個過程的呢?下面通過本文給大家詳細介紹下,一起看看吧
    2018-03-03
  • Spark MLlib隨機梯度下降法概述與實例

    Spark MLlib隨機梯度下降法概述與實例

    這篇文章主要為大家詳細介紹了Spark MLlib隨機梯度下降法概述與實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 關于Java中反射機制的深入講解

    關于Java中反射機制的深入講解

    反射(Reflection)是Java 程序開發(fā)語言的特征之一,它允許運行中的 Java 程序獲取自身的信息,并且可以操作類或對象的內部屬性,下面這篇文章主要給大家介紹了關于Java中反射機制的相關資料,需要的朋友可以參考下
    2018-08-08
  • Mybatis的介紹、基本使用、高級使用

    Mybatis的介紹、基本使用、高級使用

    這篇文章主要介紹了Mybatis的介紹、基本使用、高級使用,Mybatis是一款半自動的ORM持久層框架,具有較高的SQL靈活性,如何使用看這篇就夠了,需要的朋友可以參考下
    2023-03-03
  • 實例解析Java關于static的作用

    實例解析Java關于static的作用

    只要是有學過Java的都一定知道static,也一定能多多少少說出一些作用和注意事項。文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • 詳解定時任務框架Quartz的使用

    詳解定時任務框架Quartz的使用

    Quartz是OpenSymphony開源組織在Job?scheduling領域又一個開源項目,完全由Java開發(fā),可以用來執(zhí)行定時任務,本文就來帶大家聊聊它的具體使用
    2023-02-02
  • Mybatis?SqlSession案例詳解

    Mybatis?SqlSession案例詳解

    這篇文章主要介紹了Mybatis?SqlSession詳解,本文我們講了如何創(chuàng)建SqlSession的幾個步驟,最后我們獲得一個DefaultSqlSession對象,里面包含了執(zhí)行器Executor和配置對象Configuration,需要的朋友可以參考下
    2023-04-04
  • springboot3如何接入nacos

    springboot3如何接入nacos

    這篇文章主要介紹了springboot3接入nacos的配置方法,經過很長時間的折騰終于搞定,下面把步驟操作過程分享給大家,需要的朋友可以參考下
    2024-03-03
  • 淺析Spring中的循環(huán)依賴問題

    淺析Spring中的循環(huán)依賴問題

    這篇文章主要介紹了淺析Spring中的循環(huán)依賴問題,Spring 是利用了 三級緩存 來解決循環(huán)依賴的,其實現(xiàn)本質是通過提前暴露已經實例化但尚未初始化的 bean 來完成的,需要的朋友可以參考下
    2023-11-11

最新評論

彭泽县| 仁寿县| 边坝县| 玉环县| 萍乡市| 栾川县| 紫阳县| 雷山县| 仁化县| 武定县| 同德县| 明星| 平山县| 紫阳县| 怀化市| 泸西县| 衡山县| 深州市| 河西区| 荥经县| 郁南县| 正蓝旗| 富民县| 南雄市| 保定市| 得荣县| 萝北县| 岑巩县| 北安市| 阳泉市| 衡南县| 鹤庆县| 南皮县| 加查县| 家居| 桐庐县| 永平县| 武乡县| 吉安县| 英德市| 长春市|