DBeaver 如何从源码构建 DBeaver CE 完整产品
【免费下载链接】dbeaverFree universal database tool and SQL client项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver
DBeaver CE 是基于 Eclipse RCP 和 OSGi 插件架构的 Java 桌面数据库工具,源码仓库中的每个插件都是一个eclipse-plugin包,单独构建一个 bundle 通常无法成功。如果你想从源码产出可以分发的 DBeaver CE 完整产品(而不是单个插件),需要按仓库文档指定的聚合入口和 Maven Profile 执行完整构建。本文覆盖构建前置准备、完整产品构建命令、产物说明和测试验证方式。
前置条件
按 AGENTS.md 的说明,构建前需要满足以下条件:
- Java 21:目标平台要求
JavaSE-21,代码语言为 Java 21,且不能使用 preview 特性。 - Maven + Eclipse Tycho:构建系统为 Apache Maven + Eclipse Tycho,每个插件打包为
eclipse-plugin,测试插件为eclipse-test-plugin。 - 依赖仓库必须克隆到同一父目录:DBeaver 各仓库之间存在依赖,仓库根目录的 project.deps 声明了本仓库依赖
dbeaver-common和datadam-api两个仓库。所有 dbeaver 相关仓库必须克隆在同一个目录(文档称之为DBEAVER_DEV_HOME,即 dbeaver 仓库的父目录)下;依赖仓库缺失时,自行将其克隆到该父目录即可。 - OSGi 依赖来自 P2 仓库:所有 OSGi 依赖都来自 Eclipse P2 仓库(不是 Maven Central),包括标准 Eclipse P2 仓库和 DBeaver 自定义 P2 仓库。自定义 P2 仓库的源仓库是
dbeaver-deps-ce,负责把经典 Maven 依赖转换成 P2 bundles。根目录的 osgi-app.properties 中声明了构建使用的 P2 仓库地址(如https://repo.dbeaver.net/p2/ce/latest/),因此构建过程需要能访问这些网络仓库。 - 开发主分支为
devel,从该分支获取源码进行构建。
构建入口:聚合 POM 与产品 Profile
完整产品构建的入口是 product/aggregate/pom.xml,它把三块内容放进同一个 Maven 反应堆构建:
<modules> <module>../../../dbeaver-common</module> <module>../../../datadam-api/apis</module> <module>../..</module> </modules>前两个模块指向DBEAVER_DEV_HOME下的依赖仓库,第三个就是 dbeaver 仓库本身。这就是为什么依赖仓库必须放在同一父目录。
产品层面由 product/pom.xml 中的 Maven Profile 决定构建哪个产品:
| Profile | 构建的模块 | 说明 |
|---|---|---|
product-dbeaver-ce | product/community | DBeaver CE 桌面完整产品 |
product-dbeaver-eclipse-ce | product/repositories | Eclipse 插件的 P2 仓库 |
product-dbeaver-ce-msstore | product/community-msstore | MS Store 版本产品 |
需要构建其他产品时,使用不同的 Profile 组合;完整 Profile 列表见 product/pom.xml。
执行完整产品构建
在 dbeaver 仓库根目录执行(命令原样来自 AGENTS.md):
mvn package -f product/aggregate/pom.xml -T1C -Pproduct-dbeaver-ce,product-dbeaver-eclipse-ce-f product/aggregate/pom.xml:指定聚合入口,同时把dbeaver-common、datadam-api和 dbeaver 仓库纳入构建。-T1C:Maven 的并发构建参数,按 CPU 核数分配构建线程。-Pproduct-dbeaver-ce,product-dbeaver-eclipse-ce:同时启用两个 Profile,一个产出 CE 桌面产品,一个构建 P2 仓库。
文档明确提示:在单个 bundle 目录下直接执行mvn package通常失败,因为 OSGi 要求构建中包含所有 bundle,或者它们已经安装在本地.m2中。因此不要试图跳过聚合入口单独构建某个插件。
可选分支:如果需要构建 MS Store 版本产品,把 Profile 换成product-dbeaver-ce-msstore,它构建 product/community-msstore 模块。
构建产物
product/community/pom.xml 的 packaging 为eclipse-repository,通过tycho-p2-director-plugin物化产品,配置要点:
- 产品 ID:
org.jkiss.dbeaver.core.product - 产品归档名:
dbeaver-ce-${dbeaver-version}(${dbeaver-version}是构建定义的 Maven 属性,由构建自动解析,无需手工替换) - 归档根目录(
rootFolders配置):Linux / Windows / Solaris 为dbeaver,macOS 为DBeaver.app
构建完成后,在构建输出中查找名为dbeaver-ce-${dbeaver-version}的产品归档。按 README.md 的说明,这类归档解压后可以在命令行运行其中的dbeaver启动器来启动应用(DBeaver 运行需要 Java,预构建发行版自带 JRE)。
测试验证
按 AGENTS.md,对整个仓库运行测试的命令是:
mvn verify -f product/aggregate/pom.xml -T1C -Pproduct-dbeaver-ce,product-dbeaver-eclipse-ce该命令会运行桌面版 dbeaver ce 和 dbeaver eclipse 插件的测试。测试由 Maven Tycho 作为标准构建的一部分执行,没有单独的 test-only Maven 命令;测试在mvn install或mvn verify时随构建执行。另外,单个 bundle 内直接跑测试通常也会失败,原因同样是 OSGi 容器要求所有 bundle 参与构建或已安装在.m2。
已知限制
- Java 版本锁定在 21,目标平台为
JavaSE-21,不要依赖 preview 特性。 - bundle 间依赖声明在
META-INF/MANIFEST.MF的Require-Bundle头中,而不是pom.xml里;排查依赖问题时应看 manifest。 - 构建依赖 Eclipse P2 与 DBeaver 自定义 P2 仓库的网络可达性,离线环境无法完成完整构建。
- 主开发分支是
devel;release_VERSION分支用于各版本发布,不要直接在其上提交。
完成构建与测试后,产物与测试结果的对照就是这条路径的验证点:package产出dbeaver-ce-${dbeaver-version}产品归档,verify跑通 CE 桌面与 Eclipse 插件的测试。需要继续扩展(例如新增数据库驱动插件)时,可参考 AGENTS-New-Database-Driver.md 中的步骤,新插件加入plugins/pom.xml的模块列表后再执行上述聚合构建。
【免费下载链接】dbeaverFree universal database tool and SQL client项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考