Maven中optional關(guān)鍵字的作用是什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
10多年的沐川網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整沐川建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“沐川網(wǎng)站設(shè)計(jì)”,“沐川網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
在 Maven pom.xml 中,你經(jīng)常會(huì)看到依賴項(xiàng)中有類似下面的代碼:
<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ān)鍵字的奧秘
老規(guī)矩,畫個(gè)圖說明問題:
由于 project C 使用到了兩個(gè)來自 project A 的類 (OptionalFeatureAClass) 和 project B 的類 (OptionalFeatureBClass). 如果 project C 沒有依賴 packageA 和 packageB,那么編譯將會(huì)失敗。
project D 依賴 project C,但是對(duì)于 project D 來說,類 (OptionalFeatureAClass) 和類 (OptionalFeatureBClass) 是可選的特性,所以為了讓最終的 war/ejb package 不包含不必要的依賴,使用<optional>
聲明當(dāng)前依賴是可選的, 默認(rèn)情況下也不會(huì)被其他項(xiàng)目繼承(好比 Java 中的 final 類,不能被其他類繼承一樣)
如果 project D 確實(shí)需要用到 project C 中的 OptionalFeatureAClass 怎么辦呢?那我們就需要在 project D 的 pom.xml 中顯式的添加聲明 project A 依賴,繼續(xù)看下圖:
Project D 需要用到 Project A 的 OptionalFeatureAClass,那么需要在 Project D 的 pom.xml 文件中顯式的添加對(duì) Project A 的依賴
到這也就很好理解為什么 Maven 為什么要設(shè)計(jì) optional 關(guān)鍵字了,假設(shè)一個(gè)關(guān)于數(shù)據(jù)庫持久化的項(xiàng)目(Project C), 為了適配更多類型的數(shù)據(jù)庫持久化設(shè)計(jì),比如 MySQL 持久化設(shè)計(jì)(Project A) 和 Oracle 持久化設(shè)計(jì)(Project B),當(dāng)我們的項(xiàng)目(Project D) 要用的 Project C 的持久化設(shè)計(jì),不可能既引入 mysql 驅(qū)動(dòng)又引入 oracle 驅(qū)動(dòng)吧,所以我們要顯式的指定一個(gè),就是這個(gè)道理了
實(shí)際案例
在 spring-boot-actuator pom.xml 文件中,有超過 20 個(gè)依賴是 optional
因?yàn)?Spring Boot 不可能將沒必要的依賴也打包到你最終的 jar package 中,所以用到 spring boot actuator 的項(xiàng)目最終生成的 jar package 中不會(huì)包含這 20 多個(gè)依賴 jar,如果你要用到哪一個(gè),顯式的加入到你的項(xiàng)目就好了
在接下來的文章,自定義 Spring Boot Starter 也是這個(gè)策略,因?yàn)?starter 是包含特定功能為其他項(xiàng)目服務(wù)用的,類似本文的 Project C 的角色了,到這里你理解 optional 的奧秘了嗎?
反向應(yīng)用
如果 Project C 引入的依賴沒有加 <optional>true</optional>
,Project D 又需要依賴 Project C,但只用到 Project A 的類怎么辦呢?Maven 也是有解決辦法的,使用 exclusion 關(guān)鍵字,不多說,上一段代碼就懂了:
<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>
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
網(wǎng)站欄目:Maven中optional關(guān)鍵字的作用是什么
文章位置:http://chinadenli.net/article22/pipejc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、企業(yè)網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、虛擬主機(jī)、網(wǎng)站營銷、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)