溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java如何使用Maven BOM統(tǒng)一管理版本號

發(fā)布時間:2021-04-20 12:52:40 來源:億速云 閱讀:632 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細講解有關(guān)Java如何使用Maven BOM統(tǒng)一管理版本號,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

Java是什么

Java是一門面向?qū)ο缶幊陶Z言,可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序。

一個中大型的 Java 項目往往包含若干 JAR 包,這些 JAR 包有著不同的版本號。如果這些 JAR 包單獨發(fā)布,然后直接通過版本號引用相應(yīng)的 JAR 包,不同版本的兼容性維護將變得十分麻煩。為了解決這個問題,可以讓一個特殊的模塊引用這些 JAR 包,將版本號定義在這個模塊中,模塊中的 JAR 都是兼容的,對外發(fā)布時只發(fā)布這個特殊模塊。這個特殊模塊就是 BOM(Bill Of Materials)。

著名的 Spring Boot 就使用了這種方式來管理版本號,這個模塊就是 spring-boot-dependencies,用戶在使用 Spring Boot Starter 相關(guān)依賴時引入特定版本的 spring-boot-dependencies,然后在引入其它依賴時只需要聲明 group 和 name 即可,不需要再指定版本號了。當然,在 Gradle 中使用 Spring Boot 插件,或者在 Maven 中使用 spring-boot-starter-parent 作為父模塊也能夠達到類似的效果。

1. BOM 介紹

BOM (Bill Of Material) 是 Maven 倉庫中的一個概念,它本質(zhì)也是一個可被引用的包,但不包含代碼,只是聲明了一系列其它包。例如:Maven 中央倉庫中的 spring-boot-dependencies](https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/2.4.4/) 包。它只有一個 .pom 文件。

下面是 Maven 官網(wǎng)上的一個簡單的 BOM 的 .pom 文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.test</groupId>
  <artifactId>bom</artifactId>
  <version>1.0.0</version>
  <packaging>pom</packaging>
  <properties>
    <project1Version>1.0.0</project1Version>
    <project2Version>1.0.0</project2Version>
  </properties>
 
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.test</groupId>
        <artifactId>project1</artifactId>
        <version>${project1Version}</version>
      </dependency>
      <dependency>
        <groupId>com.test</groupId>
        <artifactId>project2</artifactId>
        <version>${project2Version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
 
  <modules>
    <module>parent</module>
  </modules>
</project>

這個文件聲明了兩個包(project1 和 project2)及其版本號,和一般 .pom 文件中的聲明不同的是, 節(jié)點外面還包含了一層 節(jié)點。以上就是 BOM 包中最核心的文件的基本結(jié)構(gòu)了;基于 Gradle 發(fā)布 BOM 包的本質(zhì)就是生成這樣的一個文件。

2. 使用 Gradle 制作一個 BOM

這里我們假定要創(chuàng)建一個 BOM,用來統(tǒng)一管理三方 Java 包,其它業(yè)務(wù)模塊通過引用這個 BOM 來間接引用需要使用的第三方 Java 包。工程完整代碼:https://github.com/Robothy/gradle-bom-example

2.1 創(chuàng)建 BOM 工程

Gradle 中的 BOM 工程需要使用 java-platform 插件,這樣的工程是一個不包含源代碼,只包含包聲明的特殊的組件,也被稱為平臺(platform)。

build.gradle 部分代碼

plugins {
    id 'java-platform'
}

dependencies {
    constraints {
        // 聲明一些三方包及其版本號
        api "org.apache.kafka:kafka-clients:2.6.0"
        api "redis.clients:jedis:3.5.2"
    }
}

上面代碼中,三方包的聲明沒有放在 dependencies 中,而是放在了 constraints 里面。這表示如果使用了其中的包,優(yōu)先使用 constraints 中聲明的版本。

BOM 項目中聲明包的方式有兩種:

  • api 表示包在編譯期可見。

  • runtime 表示包在運行期間可見。

2.2 BOM 的發(fā)布

BOM 的發(fā)布需要使用 maven-publish 插件,其發(fā)布配置如下:

publishing {
    publications {
        thirdPartPlatform(MavenPublication){
            from components.javaPlatform
            artifactId = "third-part-dependencies"
        }
    }

    repositories {
        mavenLocal()
    }
}

BOM 的命名一般以 -dependencies 結(jié)尾,這里我們?nèi)∶麨?third-part-dependnecies。

執(zhí)行 ./gradlew.bat publish 就可以將 BOM 發(fā)布到本地的 Maven 倉庫了。發(fā)布的 artifacts 包含兩個主要文件(.pom 和 .module)和若干校驗文件。其中 .pom 的文件內(nèi)容為 Maven 官方定義的 BOM 的標準格式,而.module 文件內(nèi)容是 Gradle 描述元數(shù)據(jù)的一種格式。

2.3 BOM 的使用

普通的 Java 應(yīng)用或者 Java 庫使用 BOM 的時候需要先添加 BOM 依賴,然后使用其它的庫。例如:

// 引入 BOM
implementation platform("org.example:third-part-dependencies:1.0")

// 引入包,這時不需要再指定版本號
implementation "org.apache.kafka:kafka-clients"

當然,BOM 工程或者說 platform 工程也可以使用 BOM。

使用的時候需要在 dependencies 下面引入 BOM,然后在 constraints 下面聲明要使用的庫,聲明的時候無須指定版本。另外,需要在 configurations 中調(diào)用 javaPlatform.allowDependencies(),否則會報錯。

configurations{
    javaPlatform.allowDependencies()
}

dependencies {
    api platform("org.springframework.boot:spring-boot-dependencies:2.4.4")
    constraints {
        api "org.apache.kafka:kafka-clients:2.6.0"
        api "redis.clients:jedis:3.5.2"
        api "org.springframework.batch:spring-batch-core"
    }
}

關(guān)于“Java如何使用Maven BOM統(tǒng)一管理版本號”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI