如果你用过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" }