使用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' }
结果如图:
参考
- https://dzone.com/articles/the-bill-of-materials-in-maven
- https://dzone.com/articles/gradle-goodness-use-bill-of-materials-bom-as-depen
- https://docs.gradle.org/6.8.2/userguide/java_platform_plugin.html
本文同步更新于本人CSDN
本文作者:东北小狐狸
本文链接:https://www.cnblogs.com/hellxz/p/gradle_generate_bom_for_publish.html
版权声明:本作品采用自由转载-非商用-非衍生-保持署名 (CC BY-NC-ND 3.0)许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2018-02-18 【学习笔记】FreeMarker 之于Servlet与Stuts2的应用
2018-02-18 【学习笔记】初识FreeMarker简单使用