zoukankan      html  css  js  c++  java
  • 使用Gradle生成BOM管理依赖版本

    写在前边

    自Gradle 5开始添加了Maven中 BOM 的支持。然而Gradle 6 以前,想使用BOM,需要使用 Maven 定义并发布 pom.xml 才可以。

    好在 Gradle 6 开始,官方提供了一个名为 java-platform 插件,无需复杂配置,即可生成 BOM 并发布,本文就带大家写一个 demo 简单应用此插件。

    什么是 BOM?

    BOM (The Bill of Materials in Maven) 是Maven中的概念,表现形式是一个 pom.xml 文件,使用 BOM 可以定义一系列依赖及版本。其它项目可以在使用 BOM 时,无需定义已在 BOM 中定义依赖的版本号,即可获取版本号,可理解为统一依赖版本的用途。

    当传递的版本号不合要求,可自行定义版本号,覆盖 BOM 中的定义

    BOM 由下图结构组成,以下经过部分简化:

    可以看到 打包方式是 pom,包含了 dependencyManagement 块,在 dependencyManagement 中又包含了一系列依赖及具体版本。

    使用 Gradle 6 生成 BOM

    这里用 IDEA 生成一个空的Gradle项目,结构如下:

    1. 定义 build.gradle

    plugins {
        id 'java-platform' // 引入 java-platform插件
        id 'maven-publish' // 发布插件,可用来发布 BOM 或 jar到本地与远程仓库
    }
    
    group 'online.hellxz'
    version '1.0-SNAPSHOT'
    
    repositories {
        mavenCentral()
    }
    
    // 默认为防止用户错误地引入依赖,而不是引入依赖约束,如果引入依赖会报错失败。
    // 通过这个配置可以让Gradle允许引入依赖,当然这是可选的
    javaPlatform {
        allowDependencies()
    }
    
    dependencies {
        //在constraints块中定义依赖版本约束
        constraints{
            api group: 'org.springframework.boot', name: 'spring-boot-starter', version: '2.4.2'
        }
    }
    
    publishing{
        publications{
            //以下maven并非关键字,可自定义
            maven(MavenPublication) {
                //通过java-platform生成BOM
                from components.javaPlatform
            }
        }
    }
    

    2. 定义setting.gradle

    只有一行 rootProject.name = 'bom-demo1'

    3. 生成 BOM 到本地仓库

    或 执行命令:

    gradle -q publishToMavenLocal
    

    4. 查看本地仓库生成的 BOM

    其他项目使用 BOM

    build.gradle如下:

    plugins {
        id 'java'
    }
    
    group 'online.hellxz'
    version '1.0-SNAPSHOT'
    
    repositories {
        mavenLocal() // 引本地仓库
    }
    
    dependencies {
        // 依赖上文本地仓库中的BOM
        implementation platform('online.hellxz:bom-demo1:1.0-SNAPSHOT')
        // 不带依赖版本引包
        implementation 'org.springframework.boot:spring-boot-starter'
    }
    

    结果如图:

    参考

    本文同步更新于本人CSDN

  • 相关阅读:
    复习面向对象--继承,重写,重载,抽象详解
    复习面向对象---员工案例
    连接池介绍 + 示意图 + 手写连接池pool
    statement 和 preparedStatement 优缺点
    软件测试(二十三)
    软件测试(二十二)
    软件测试(二十一)
    软件测试(二十)
    软件测试(十九)
    软件测试(十八)
  • 原文地址:https://www.cnblogs.com/hellxz/p/gradle_generate_bom_for_publish.html
Copyright © 2011-2022 走看看