摘要: 原創出處 sf.gg/a/1190000021198564 「飄渺Jam」歡迎轉載,保留摘要,謝謝!
-
為什么要使用BOM?
-
如何定義BOM?
-
項目使用方法?
BOM(Bill of Materials)是由Maven提供的功能,它通過定義一整套相互兼容的jar包版本集合,使用時只需要依賴該BOM文件,即可放心的使用需要的依賴jar包,且無需再指定版本號。BOM的維護方負責版本升級,并保證BOM中定義的jar包版本之間的兼容性。
為什么要使用BOM
使用BOM除了可以方便使用者在聲明依賴的客戶端時不需要指定版本號外,最主要的原因是可以解決依賴沖突,如考慮以下的依賴場景:
項目A依賴項目B 2.1和項目C 1.2版本:
項目B 2.1依賴項目D 1.1版本;
項目C 1.2依賴項目D 1.3版本;
在該例中,項目A對于項目D的依賴就會出現沖突,按照maven dependency mediation的規則,最后生效的可能是:項目A中會依賴到項目D1.1版本(就近原則,取決于路徑和依賴的先后,和Maven版本有關系)。
在這種情況下,由于項目C依賴1.3版本的項目D,但是在運行時生效的確是1.1版本,所以在運行時很容易產生問題,如 NoSuchMethodError, ClassNotFoundException等。
如何定義BOM
BOM本質上是一個普通的POM文件,區別是對于使用方而言,生效的只有這一個部分。只需要在定義對外發布的客戶端版本即可:
4.0.0
<groupId>com.ydj.qd</groupId>
<artifactId>inf-bom</artifactId>
<version>1.0</version>
<packaging>pom</packaging><name>inf-bom</name>
<description>第三方jar包統一管理</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring.version>4.3.15.RELEASE</spring.version>
</properties><dependencyManagement><dependencies><!-- 阿里 --><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version></dependency><!-- https://mvnrepository.com/artifact/com.aliyun.mns/aliyun-sdk-mns --><dependency><groupId>com.aliyun.mns</groupId><artifactId>aliyun-sdk-mns</artifactId><version>1.1.8</version><classifier>jar-with-dependencies</classifier></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.29</version></dependency><!-- Apache --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.3.2</version></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.2</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.1</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.1</version></dependency><!-- 谷歌 --><!-- https://mvnrepository.com/artifact/com.google.guava/guava --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>27.0.1-jre</version></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version></dependency><!-- 常用工具 --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.7</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.14.4</version></dependency></dependencies>
</dependencyManagement><build>
</build><distributionManagement><repository><id>maven-releases</id><name>maven-releases</name><url>http://mvn.ydj.com/repository/maven-releases/</url></repository><snapshotRepository><id>maven-snapshots</id><name>maven-snapshots</name><url>http://mvn.ydj.com/repository/maven-snapshots/</url></snapshotRepository>
</distributionManagement>
項目使用方法 在你的項目主pom.xml文件中節點下首位處加入如下: com.jlcx.qd inf-bom ${version} pom import
<dependency>...</dependency>
</dependencies>
在需要使用相關JAR包的pom.xml文件中節點下引入如下: ... com.google.guava guava
<dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId>
</dependency>
....
如果需要使用不同于當前bom中所維護的jar包版本,則加上覆蓋即可,如: ... com.google.guava guava
<dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.1</version>
</dependency>
....
WX 搜索《醉魚Java》,回復面試,獲取2024面試資料。
如果這篇文章對您有所幫助或者啟發,幫忙點個關注叭,您的支持是我堅持寫作的最大動力。
求一鍵三連:點贊、轉發、在看。
謝謝支持喲 !