日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Mavenoptional關(guān)鍵字透徹圖解

 寫在前面

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

在 Maven pom.xml 中,你經(jīng)常會看到依賴項中有類似下面的代碼: 

 
 
 
 
  1.   
  2.   sample.ProjectA  
  3.   Project-A  
  4.   1.0  
  5.   compile  
  6.   true   
  7.  

這里的 true 是什么意思呢?

optional 關(guān)鍵字的奧秘

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

由于 project C 使用到了兩個來自 project A 的類 (OptionalFeatureAClass) 和 project B 的類 (OptionalFeatureBClass). 如果 project C 沒有依賴 packageA 和 packageB,那么編譯將會失敗。

project D 依賴 project C,但是對于 project D 來說,類 (OptionalFeatureAClass) 和類 (OptionalFeatureBClass) 是可選的特性,所以為了讓最終的 war/ejb package 不包含不必要的依賴,使用 聲明當(dāng)前依賴是可選的, 默認(rèn)情況下也不會被其他項目繼承(好比 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 為什么要設(shè)計 optional 關(guān)鍵字了,假設(shè)一個關(guān)于數(shù)據(jù)庫持久化的項目(Project C), 為了適配更多類型的數(shù)據(jù)庫持久化設(shè)計,比如 Mysql 持久化設(shè)計(Project A) 和 Oracle 持久化設(shè)計(Project B),當(dāng)我們的項目(Project D) 要用的 Project C 的持久化設(shè)計,不可能既引入 mysql 驅(qū)動又引入 oracle 驅(qū)動吧,所以我們要顯式的指定一個,就是這個道理了

實際案例

在 spring-boot-actuator pom.xml 文件中,有超過 20 個依賴是 optional

因為 Spring Boot 不可能將沒必要的依賴也打包到你最終的 jar package 中,所以用到 spring boot actuator 的項目最終生成的 jar package 中不會包含這 20 多個依賴 jar,如果你要用到哪一個,顯式的加入到你的項目就好了

在接下來的文章,自定義 Spring Boot Starter 也是這個策略,因為 starter 是包含特定功能為其他項目服務(wù)用的,類似本文的 Project C 的角色了,到這里你理解 optional 的奧秘了嗎?

反向應(yīng)用

如果 Project C 引入的依賴沒有加 true,Project D 又需要依賴 Project C,但只用到 Project A 的類怎么辦呢?Maven 也是有解決辦法的,使用 exclusion 關(guān)鍵字,不多說,上一段代碼就懂了: 

 
 
 
 
  1.   
  2.       
  3.       top.dayarch.demo  
  4.       Project-C  
  5.         
  6.           
  7.           top.dayarch.demo  
  8.           Project-B  
  9.           
  10.          
  11.       
  12.  

總結(jié)

到這里,在你今后設(shè)計功能性依賴時,你應(yīng)該明白怎樣設(shè)計依賴關(guān)系了, 我這里推薦使用 optional 的形式,簡單來說,你設(shè)計的依賴什么菜都有,想吃什么菜自己 "抱蔡明" 就好,接下來我們就模擬官方標(biāo)準(zhǔn)創(chuàng)建自定義的 starter...... 博客 訪問恢復(fù)正常,歡迎交流


本文標(biāo)題:Mavenoptional關(guān)鍵字透徹圖解
本文URL:http://www.5511xx.com/article/cdseisj.html