Maven中optional關鍵字的作用是什么

Maven中optional關鍵字的作用是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

10多年的沐川網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網營銷推廣的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整沐川建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯公司從事“沐川網站設計”,“沐川網站推廣”以來,每個客戶項目都認真落實執行。

在 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關鍵字的作用是什么
文章位置:http://m.kartarina.com/article22/pipejc.html

成都網站建設公司_創新互聯,為您提供定制網站、企業網站制作、手機網站建設、虛擬主機、網站營銷、面包屑導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計
主站蜘蛛池模板: 亚洲av无码国产精品色在线看不卡 | 亚洲AV永久无码精品一区二区国产 | 精品国产一区二区三区无码| 亚洲AV无码不卡无码| 精品三级AV无码一区| 亚洲中文字幕无码专区| 91精品日韩人妻无码久久不卡| 亚洲av无码乱码在线观看野外 | 无码精品视频一区二区三区| 免费无码成人AV片在线在线播放| 国产丝袜无码一区二区三区视频| 亚洲精品中文字幕无码A片老| 中文字幕无码一区二区三区本日| 亚洲熟妇无码AV不卡在线播放| 中文无码喷潮在线播放| 无码Aⅴ在线观看| 亚洲毛片无码专区亚洲乱| 中国无码人妻丰满熟妇啪啪软件| 韩国精品一区二区三区无码视频 | 红桃AV一区二区三区在线无码AV| 亚洲精品久久无码av片俺去也 | 亚洲成a人片在线观看无码| 精品无码国产污污污免费| 亚洲AV无码成人精品区天堂 | 亚洲精品色午夜无码专区日韩| av中文无码乱人伦在线观看| 99久久无码一区人妻a黑| 99精品国产在热久久无码| 亚洲V无码一区二区三区四区观看 亚洲爆乳精品无码一区二区三区 亚洲爆乳无码一区二区三区 | 免费无码H肉动漫在线观看麻豆| 国产成人无码AV在线播放无广告 | 亚洲AV无码专区在线厂| 中文字幕亚洲精品无码| 精品亚洲A∨无码一区二区三区 | 精品无码免费专区毛片| 免费无遮挡无码永久视频| 久久久久亚洲av无码专区喷水| 亚洲中文无码线在线观看| 亚洲精品自偷自拍无码| 在线A级毛片无码免费真人| 性无码专区一色吊丝中文字幕|