Step1-bigtop.bom配置
# 1. bigtop.bom 配置结构与分层
bigtop.bom 是整个 Bigtop 编译自动化体系的“元数据中心”。采用 Groovy DSL 格式,参数分层清晰,扩展灵活。如下图所示:
主要结构包括:
区块 | 说明 |
---|---|
全局配置 | 比如 base_version、stack、仓库源等 |
dependencies | 编译依赖关系管理 |
components | 各组件独立的打包参数和元信息 |
通过分层管理,方便后续所有自动化脚本灵活引用。
提示
实际工程中只需维护 bom 文件,所有核心参数都可集中配置,无需到处 hardcode。
# 2. packages.gradle 参数读取与流转主线
所有 gradle 构建任务的参数流转,均以 bigtop.bom 为源头。主线逻辑非常直观:
关键读取代码:
final String BOM = System.getProperty('bomfile') ?: "$rootDir/bigtop.bom"
def final config = new ConfigSlurper().parse(new URL("file:$BOM"))
2
- 通过 ConfigSlurper 解析,bigtop.bom 被动态转为 config 对象,后续 gradle 任务链全程引用 config。
# 3. 参数流转全景梳理
# 3.1 全局版本与路径注入
所有全局变量(如 base_version、outputdir、builddir)在 bigtop.bom 统一配置,gradle 脚本直接引用,无需重复声明。
bigtop.bom 配置示例:
bigtop {
base_version = "3.2.0"
version = base_version + "-SNAPSHOT"
outputdir = "/opt/modules/bigtop/output"
builddir = "/opt/modules/bigtop/build"
}
2
3
4
5
6
gradle 调用方式:
config.bigtop.base_version
config.bigtop.version
config.bigtop.outputdir
config.bigtop.builddir
2
3
4
笔记
这样所有构建路径、产物路径在全局可控,组件切换、环境变更都能一键管理。
# 3.2 组件循环与动态任务链
bigtop.bom 中的 components 区块,定义了所有需要构建的组件。gradle 解析后,会自动为每个组件生成完整的任务链。
配置示例:
components {
'redis' { ... }
'hadoop' { ... }
// 其余组件...
}
2
3
4
5
任务生成流程:
- 未声明的组件自动跳过,简化维护成本。
- 动态 for-each 生成所有构建、打包、上传、验证等 gradle 任务。
提示
新增组件只需补充一段配置,完全无侵入式改动。
# 3.3 组件参数的全链路贯穿与自动接力
以 Redis 为例,核心参数如何贯穿任务链?
bigtop.bom 示例片段:
'redis' {
name = 'redis'
rpm_pkg_suffix = "_" + bigtop.base_version.replace(".", "_")
relNotes = 'Redis v7.4.0 Release'
version { base = '7.4.0'; pkg = base; release = 1 }
tarball {
destination = "${version.base}.tar.gz"
source = destination
}
url {
site = bigtop.gh_proxy + "https://github.com/redis/redis/archive/refs/tags/"
archive = site
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
packages.gradle 参数消费流:
字段名 | 说明 | 主要用途 |
---|---|---|
name, pkg | 组件/包名 | 任务命名、产物命名 |
version.base/pkg/release | 版本号/包名/发布号 | 构建参数、rpm产物名 |
tarball.source/destination | 源码包名/归档名 | 下载、解包、产物路径 |
url.site/archive | 主下载路径/归档 | 源码拉取、断点补全 |
rpm_pkg_suffix | 包名后缀 | 多环境产物区分 |
relNotes | 组件说明 | 日志、产物说明 |
笔记
所有这些字段在 gradle 任务链中动态引用,减少重复声明,自动完成参数接力。
# 3.4 源码包下载与本地缓存优先
源码包下载也是 bom 配置驱动的,支持多级缓存逻辑:
bigtop.bom 配置
- 维护 tarball、url 字段即可
gradle 解析流程
- 先查本地缓存
- 未命中则走 url 拉取
- 支持 gitrepo、archive 多种源灵活切换
代码示例:
def final TARBALL_SRC = config.bigtop.components[target].tarball.source
def final TARBALL_DST = config.bigtop.components[target].tarball.destination
def final DOWNLOAD_DST = config.bigtop.components[target].downloaddst
def final DOWNLOAD_URL = config.bigtop.components[target].downloadurl
2
3
4
笔记
其中 downloaddst 字段常由 gradle 任务链中按需动态拼接,充分兼容实际目录结构差异。
# 4. 总结与实用建议
bigtop.bom 是实现大数据多组件自动化编译的核心配置文件。它不仅实现了参数声明与逻辑实现的彻底解耦,还极大提升了整个编译链的灵活性与可维护性。你只需专注于 bom 文件的内容组织,就能实现对 packages.gradle 的统一和中心化驱动。
延伸阅读
如果你希望自定义集成某个新组件,bigtop.bom 也提供了通用模板代码,详见:bigtop.bom通用组件代码
- 01
- bigtop-select 打包缺 compat 报错修复 deb07-16
- 02
- bigtop-select 打包缺 control 文件报错修复 deb07-16
- 03
- 首次编译-环境初始化 必装07-16