Gradle中原生使用BOM(publish)

如果你用过Maven,可能听说过BOM,这是一个解决Java项目版本冲突的有效工具。

在早先的Gradle版本中,是没有原生BOM支持的,只能通过一些很蹩脚的方式引用Maven的BOM。

在5.0+后,提供了platform机制,可以更加”原生“的实现类似BOM的方法,而且更加简洁。

1 在Gradle中定义你的BOM

build.gradle

只有中间的dependencies部分是可能需要调整的

plugins {
    id 'java-platform'
    id 'maven-publish'
}

group 'com.coder4'
version '1.0'

dependencies {
    constraints {
        api 'com.google.protobuf:protobuf-java:3.17.3'
        api "io.grpc:grpc-stub:1.39.0"
        api "io.grpc:grpc-protobuf:1.39.0"
    }
}

publishing {
    publications {
        myPlatform(MavenPublication) {
            from components.javaPlatform
        }
    }
}

2 定义项目名

settings.gradle

rootProject.name = 'bom-xxx'

这里还是叫了xxx,因为他的最终发布实际是转化成pom发布到maven仓库的。

3 发布

自选一种gradle publishXXX即可

Publishing tasks
----------------
generateMetadataFileForMyPlatformPublication - Generates the Gradle metadata file for publication 'myPlatform'.
generatePomFileForMyPlatformPublication - Generates the Maven POM file for publication 'myPlatform'.
publish - Publishes all publications produced by this project.
publishMyPlatformPublicationToMavenLocal - Publishes Maven publication 'myPlatform' to the local Maven repository.
publishToMavenLocal - Publishes all Maven publications produced by this project to the local Maven cache.

4 在别的项目中引用

使用bom之前

dependencies {
    implementation 'com.google.protobuf:protobuf-java:3.17.3'
    implementation "io.grpc:grpc-stub:1.39.0"
    implementation "io.grpc:grpc-protobuf:1.39.0"
}

使用bom之后,引用一下bom就不用写具体依赖的版本了

dependencies {
    implementation project(':homs-demo-client')

    implementation 'com.google.protobuf:protobuf-java'
    implementation "io.grpc:grpc-stub"
    implementation "io.grpc:grpc-protobuf"
}

 

Leave a Reply

Your email address will not be published.