\1. 【強(qiáng)制】定義 GAV 遵從以下規(guī)則:
1) GroupID 格式:com.{公司/BU }.業(yè)務(wù)線 [.子業(yè)務(wù)線]
,最多 4 級(jí)。
說(shuō)明:{公司/BU}
例如:alibaba/taobao/tmall/aliexpress
等 BU 一級(jí);子業(yè)務(wù)線可選。
正例:com.taobao.jstorm
或 com.alibaba.dubbo.register
2) ArtifactID 格式:產(chǎn)品線名-模塊名。語(yǔ)義不重復(fù)不遺漏,先到中央倉(cāng)庫(kù)去查證一下。
正例:dubbo-client / fastjson-api / jstorm-tool
3) Version:詳細(xì)規(guī)定參考下方。
\2. 【強(qiáng)制】二方庫(kù)版本號(hào)命名方式:主版本號(hào).次版本號(hào).修訂號(hào)
1)主版本號(hào):產(chǎn)品方向改變,或者大規(guī)模 API 不兼容,或者架構(gòu)不兼容升級(jí)。
2) 次版本號(hào):保持相對(duì)兼容性,增加主要功能特性,影響范圍極小的 API 不兼容修改。
3) 修訂號(hào):保持完全兼容性,修復(fù) BUG、新增次要功能特性等。
說(shuō)明:注意起始版本號(hào)必須為:1.0.0
,而不是 0.0.1
。
反例:倉(cāng)庫(kù)內(nèi)某二方庫(kù)版本號(hào)從 1.0.0.0
開(kāi)始,一直默默“升級(jí)”成 1.0.0.64
,完全失去版本的語(yǔ)義信息。
\3. 【強(qiáng)制】線上應(yīng)用不要依賴 SNAPSHOT 版本(安全包除外);正式發(fā)布的類庫(kù)必須先去中央倉(cāng)庫(kù)進(jìn)行查證,使 RELEASE 版本號(hào)有延續(xù)性,且版本號(hào)不允許覆蓋升級(jí)。
說(shuō)明:不依賴 SNAPSHOT 版本是保證應(yīng)用發(fā)布的冪等性。另外,也可以加快編譯時(shí)的打包構(gòu)建。
\4. 【強(qiáng)制】二方庫(kù)的新增或升級(jí),保持除功能點(diǎn)之外的其它 jar 包仲裁結(jié)果不變。如果有改變,必須明確評(píng)估和驗(yàn)證。
說(shuō)明:在升級(jí)時(shí),進(jìn)行 dependency:resolve
前后信息比對(duì),如果仲裁結(jié)果完全不一致,那么通 dependency:tree
命令,找出差異點(diǎn),進(jìn)行<exclude>
排除 jar 包。
\5. 【強(qiáng)制】二方庫(kù)里可以定義枚舉類型,參數(shù)可以使用枚舉類型,但是接口返回值不允許使用枚舉類型或者包含枚舉類型的 POJO 對(duì)象。
\6. 【強(qiáng)制】依賴于一個(gè)二方庫(kù)群時(shí),必須定義一個(gè)統(tǒng)一的版本變量,避免版本號(hào)不一致。
說(shuō)明:依賴 springframework-core,-context,-beans
,它們都是同一個(gè)版本,可以定義一個(gè)變量來(lái)保存版本:${spring.version}
,定義依賴的時(shí)候,引用該版本。
\7. 【強(qiáng)制】禁止在子項(xiàng)目的 pom 依賴中出現(xiàn)相同的 GroupId,相同的 ArtifactId,但是不同的Version。
說(shuō)明:在本地調(diào)試時(shí)會(huì)使用各子項(xiàng)目指定的版本號(hào),但是合并成一個(gè) war,只能有一個(gè)版本號(hào)出現(xiàn)在最后的 lib 目錄中。曾經(jīng)出現(xiàn)過(guò)線下調(diào)試是正確的,發(fā)布到線上卻出故障的先例。
\8. 【推薦】底層基礎(chǔ)技術(shù)框架、核心數(shù)據(jù)管理平臺(tái)、或近硬件端系統(tǒng)謹(jǐn)慎引入第三方實(shí)現(xiàn)。
\9. 【推薦】所有 pom 文件中的依賴聲明放在<dependencies>
語(yǔ)句塊中,所有版本仲裁放在 <dependencyManagement>
語(yǔ)句塊中。
說(shuō)明:<dependencyManagement>
里只是聲明版本,并不實(shí)現(xiàn)引入,因此子項(xiàng)目需要顯式的聲明依賴,version 和 scope 都讀取自父 pom。而<dependencies>
所有聲明在主 pom 的<dependencies>
里的依賴都會(huì)自動(dòng)引入,并默認(rèn)被所有的子項(xiàng)目繼承。
10.【推薦】二方庫(kù)不要有配置項(xiàng),最低限度不要再增加配置項(xiàng)。
11.【推薦】不要使用不穩(wěn)定的工具包或者 Utils 類。
說(shuō)明:不穩(wěn)定指的是提供方無(wú)法做到向下兼容,在編譯階段正常,但在運(yùn)行時(shí)產(chǎn)生異常,因此,盡量使用業(yè)界穩(wěn)定的二方工具包。
12.【參考】為避免應(yīng)用二方庫(kù)的依賴沖突問(wèn)題,二方庫(kù)發(fā)布者應(yīng)當(dāng)遵循以下原則:
1)精簡(jiǎn)可控原則。移除一切不必要的 API 和依賴,只包含 Service API、必要的領(lǐng)域模型對(duì)象、Utils 類、常量、枚舉等。如果依賴其它二方庫(kù),盡量是 provided 引入,讓二方庫(kù)使用者去依賴具體版本號(hào);無(wú) log具體實(shí)現(xiàn),只依賴日志框架。
2)穩(wěn)定可追溯原則。每個(gè)版本的變化應(yīng)該被記錄,二方庫(kù)由誰(shuí)維護(hù),源碼在哪里,都需要能方便查到。除非用戶主動(dòng)升級(jí)版本,否則公共二方庫(kù)的行為不應(yīng)該發(fā)生變化。
更多建議: