91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Maven 中optional關鍵字有什么作用

發布時間:2021-07-23 15:51:59 來源:億速云 閱讀:177 作者:Leah 欄目:編程語言

這篇文章給大家介紹Maven 中optional關鍵字有什么作用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

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

老規矩,畫個圖說明問題:

Maven 中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 依賴,繼續看下圖:

Maven 中optional關鍵字有什么作用

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

Maven 中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>

關于Maven 中optional關鍵字有什么作用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

京山县| 兴和县| 民县| 凌云县| 慈利县| 洪雅县| 桂东县| 上饶县| 晋城| 黄冈市| 邢台市| 洛川县| 垫江县| 婺源县| 临西县| 莒南县| 嘉黎县| 彰化县| 定远县| 宁强县| 沙雅县| 宝山区| 唐河县| 宁乡县| 云浮市| 巧家县| 巴塘县| 普安县| 扶绥县| 内黄县| 抚顺市| 辉南县| 喀什市| 常宁市| 新疆| 盐亭县| 湖州市| 阿尔山市| 安西县| 杭锦后旗| 临夏市|