偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

架構(gòu)必修課:使用Bom管理依賴項,告別依賴包版本沖突

開發(fā) 架構(gòu)
如果你使用過 Spring Boot,應(yīng)該能注意到我們只需要聲明使用的庫即可,而不必指定版本。

如果你使用過 Spring Boot,應(yīng)該能注意到我們只需要聲明使用的庫即可,而不必指定版本。如下所示:

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-web'
  implementation 'javax.cache:cache-api'
  implementation 'jakarta.xml.bind:jakarta.xml.bind-api'
  
  runtimeOnly 'org.springframework.boot:spring-boot-starter-actuator'
  runtimeOnly 'com.h2database:h2'
  runtimeOnly 'org.postgresql:postgresql'

  testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

那么這是如何實現(xiàn)的呢?答案當(dāng)然是使用Bom進行版本管理。

為什么要使用Bom?

不使用Bom將會存在很多問題,如下:

  1. 版本沖突:當(dāng)不同的模塊或項目中使用相同的依賴項但版本不一致時,可能會發(fā)生版本沖突??赡軐?dǎo)致編譯錯誤、運行時異?;虿豢深A(yù)測的行為。沒有統(tǒng)一的依賴版本管理機制,開發(fā)人員需要手動處理版本沖突,增加了工作量和復(fù)雜性。
  2. 配置繁瑣:在每個模塊或項目中單獨指定依賴的版本號會導(dǎo)致配置繁瑣。當(dāng)需要更新或更改依賴版本時,必須在每個地方進行修改,容易遺漏或出錯。這樣的配置過程耗費時間且容易引入錯誤。
  3. 不一致的依賴環(huán)境:每個模塊或項目都有自己獨立的依賴配置,可能會導(dǎo)致不一致的依賴環(huán)境。這種不一致性可能導(dǎo)致測試和部署問題,以及與其他團隊成員之間的協(xié)作困難。
  4. 難以維護和更新:沒有集中的依賴管理機制,使得維護和更新依賴項變得困難。當(dāng)需要升級依賴版本或添加新的依賴時,需要在多個模塊或項目中進行手動操作,容易出錯并帶來額外的工作量。
  5. 缺乏可視化和統(tǒng)一性:沒有BOM作為依賴清單,開發(fā)人員可能缺乏對項目整體依賴關(guān)系和版本一致性的全局視圖。這使得項目管理和團隊協(xié)作變得更加困難。

舉一個例子,app項目引入guava:31.1版本,又引入了lib,lib中依賴了guava:25.0,這時候?qū)嬖趦蓚€版本,如果還依賴了其他lib,其中又依賴了其他的guava版本,那么項目中同一個依賴將存在非常多的版本,難以管理。且與其他項目組協(xié)作時,版本不統(tǒng)一可能導(dǎo)致很多編譯錯誤。

比如在guava:25.0中的這段代碼:

public class FutureStub {

    public static Future<String> ofString(String s) {
        doSomethingFunOnPurpose();
        return CompletableFuture.completedFuture(s);
    }

    private static void doSomethingFunOnPurpose() {
        Futures.immediateCheckedFuture(new Object());
    }
}
public class App {

    public static void main(String[] args) throws Exception {
        final var future = FutureStub.ofString("Hello Maven BOM");
        System.out.println(future.get());
    }
}

在App類中的main函數(shù)對FutureStub.ofString方法進行調(diào)用,這段代碼在guava:25.0中運行良好,但在當(dāng)前App項目中就會報錯,原因是該方法在guava:28后就已經(jīng)廢棄了。

那么要如何統(tǒng)一管理Bom呢?可以使用 Gradle 或者 Maven。

Gradle Bom示例:

  1. 首先,在項目的根目錄下創(chuàng)建一個名為dependencies.gradle的文件,用于定義BOM(Bill of Materials):
ext {
    // 定義BOM版本
    bomVersion = '1.0.0'

    // 定義依賴項的版本號
    dependencies = [
        'dependency1': '1.2.3',
        'dependency2': '4.5.6',
        // 添加更多依賴項...
    ]
}

// 創(chuàng)建BOM配置
configurations {
    bom
}

// 生成BOM文件
task generateBom {
    outputs.file("dependencies.bom")
    doLast {
        def bomFile = new File(outputs.files.singleFile, "dependencies.bom")
        bomFile.text = configurations.bom.getResolvedConfiguration().getFirstLevelModuleDependencies().collect { dep ->
            "${dep.moduleGroup}:${dep.moduleName}:${dep.moduleVersion}"
        }.join("\n")
    }
}
  1. 在項目的build.gradle文件中,引入BOM并應(yīng)用到模塊中,并定義Maven發(fā)布任務(wù):
apply from: 'dependencies.gradle'
plugins {
    id 'maven-publish'
}

// 發(fā)布到Maven倉庫
publishing {
    repositories {
        maven {
            url "https://your.maven.repository.url" // 替換為實際的Maven倉庫地址
            credentials {
                username 'your-username' // 替換為Maven倉庫的用戶名
                password 'your-password' // 替換為Maven倉庫的密碼或API密鑰
            }
        }
    }

    publications {
        mavenBom(MavenPublication) {
            artifactId 'your-bom-artifact' // 替換為您的BOM的Artifact ID
            version bomVersion
            groupId 'your.group.id' // 替換為您的BOM的Group ID

            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                dependencies.each { depName, depVersion ->
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', 'your.dependency.group.id') // 替換為實際的依賴項的Group ID
                    dependencyNode.appendNode('artifactId', depName)
                    dependencyNode.appendNode('version', depVersion)
                }
            }
        }
    }
}

// 發(fā)布任務(wù)
task publishToMavenRepository {
    dependsOn generateBom
    dependsOn publish
}
  1. 運行 publishToMavenRepository 任務(wù)來生成 BOM 文件并發(fā)布到 Maven 倉庫:
./gradlew publishToMavenRepository

這樣就完成了Bom的定義和發(fā)布,可以在Bom中統(tǒng)一管理項目中的依賴項版本,并可以讓其他團隊使用這個Bom。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2022-03-11 10:53:32

UML建模語言

2009-02-10 15:08:41

2009-09-29 10:35:42

Linux系統(tǒng)系統(tǒng)提速Linux

2010-11-25 10:55:34

2014-02-17 09:22:37

2012-01-06 14:10:42

數(shù)據(jù)質(zhì)量管理大數(shù)據(jù)數(shù)據(jù)管理

2025-09-17 07:07:00

智能體GenAI人工智能

2015-07-29 10:25:05

數(shù)據(jù)開發(fā)產(chǎn)品必修課

2018-04-28 10:05:17

2018-08-06 11:07:03

技術(shù)管理者識人

2023-09-27 22:18:41

2022-08-15 15:03:57

數(shù)字化轉(zhuǎn)型數(shù)字技術(shù)中小企業(yè)

2024-10-07 08:18:05

SpringBOM管理

2014-06-23 15:37:50

2020-10-23 10:02:40

GRASPRDD模式

2025-09-05 10:17:27

服務(wù)器運維磁盤RAID

2020-01-13 16:26:57

AI人工智能機器

2022-08-05 13:03:09

Python依賴管理代碼

2013-02-28 09:46:18

程序員巖機Hacker News

2022-07-27 14:04:25

數(shù)據(jù)中心云服務(wù)云計算
點贊
收藏

51CTO技術(shù)棧公眾號