news 2026/9/10 14:48:24

DBeaver 单 bundle 构建或测试执行失败怎么排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DBeaver 单 bundle 构建或测试执行失败怎么排查

DBeaver 单 bundle 构建或测试执行失败怎么排查

【免费下载链接】dbeaverFree universal database tool and SQL client项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver

在 DBeaver Community Edition 仓库里做二次开发时,最容易卡住的一步是:在某个插件目录(例如plugins/org.jkiss.dbeaver.ext.postgresql)或某个测试插件目录里直接执行mvn package或跑测试,结果失败。这不是偶发问题——AGENTS.md 明确说明:单个 bundle 用mvn package构建"通常失败",单个 bundle 里的测试"通常失败"。这篇文章基于仓库内的 AGENTS.md、pom.xml、product/pom.xml、tools/build.sh、tools/build.cmd 和 CI 工作流,说明这类失败的文档化原因,以及应该走哪条全量构建/测试路径来完成任务。

为什么单 bundle 运行会失败(文档给出的原因)

先对照 AGENTS.md 中的 "Build System" 一节确认失败是否在文档预期之内:

  • 单 bundle 构建Building a single bundle with mvn package in bundle folder usually fails.
  • 单 bundle 测试Running tests in a single bundle usually fail because OSGI needs ALL bundles to be included in build OR be installed in .m2.
  • 依赖不来自 Maven:所有 OSGi 依赖来自 Eclipse P2 仓库(标准 Eclipse P2 + DBeaver 自定义 P2,见 AGENTS.md 中repo.p2.eclipse.url的说明),而不是 Maven。自定义 P2 仓库的源码仓库是dbeaver-deps-ce,它把经典 Maven 依赖转换成 P2 bundle。
  • bundle 间依赖不走 pom.xml:bundle 之间的依赖声明在META-INF/MANIFEST.MFRequire-Bundle头里,不在pom.xml中。

另外,根 pom.xml 的<parent>指向com.dbeaver.common.mainrelativePath../dbeaver-common/pom.xml——即父 POM 在 dbeaver 仓库的同级目录中解析。如果同级目录缺少dbeaver-common,Maven 在解析任何子模块前就会失败。

因此判断顺序是:你的失败如果发生在"单个 bundle 目录内的独立 Maven 运行",属于文档记录的预期行为;此时正确做法不是修那个目录,而是切换到全量构建路径并核对前置环境。

前置环境核对

在运行任何全量构建前,按 AGENTS.md 的 "Repo dependencies" 一节核对:

  1. 同级仓库齐全。本仓库根目录的 project.deps 是一个简单文本文件,每行一个依赖仓库名,当前内容为dbeaver-commondatadam-api。文档要求所有相关仓库克隆在同一个目录(DBEAVER_DEV_HOME,即 dbeaver 仓库的父目录)。这一点也可以从 product/aggregate/pom.xml 得到印证:聚合 POM 的 modules 直接引用了../../../dbeaver-common../../../datadam-api/apis
  2. JDK 版本。AGENTS.md 的 "Common Pitfalls" 一节的记录:构建要求 Java 21,target platform 为JavaSE-21,不要使用 preview 特性。
  3. 测试插件归属。测试插件位于test/目录,镜像对应的生产插件(如test/org.jkiss.dbeaver.ext.postgresql.test/)。它们通过根 pom.xml 中的desktopprofile 参与构建——该 profile 在headless-platform属性设置时激活(默认激活),把test模块加入构建;设置headless-platform属性后测试模块不再参与。文档同时说明:没有单独的"只跑测试"Maven 命令,测试是在mvn installmvn verify的标准构建过程中执行的。

用全量构建命令复现正确路径

AGENTS.md 给出的两条文档命令(原样保留):

# 完整产品构建 mvn package -f product/aggregate/pom.xml -T1C -Pproduct-dbeaver-ce,product-dbeaver-eclipse-ce
# 全仓库测试(会运行 desktop dbeaver ce 与 dbeaver eclipse 插件的测试) mvn verify -f product/aggregate/pom.xml -T1C -Pproduct-dbeaver-ce,product-dbeaver-eclipse-ce

Maven profile 列表可以在 product/pom.xml 中核对,当前包含三个产品 profile,各自启用的模块为:

profile启用模块
product-dbeaver-cecommunity
product-dbeaver-eclipse-cerepositories
product-dbeaver-ce-msstorecommunity-msstore

如果目标是构建其他产品,按 AGENTS.md 的说明改用product/pom.xml中列出的对应 profile 替换上面的-P参数。

替代路径:仓库自带的构建脚本

tools/下提供了两个封装了"克隆依赖仓库 + 执行聚合构建"的脚本,适合首次搭建环境时使用。注意它们会修改仓库之外的目录,使用前提如下。

tools/build.sh(POSIX shell),流程为:

  1. 检查git是否存在,缺失则报错退出;
  2. 若 dbeaver 仓库的父目录下没有dbeaver-common,则执行git clone克隆该仓库(脚本内写明来源地址)。副作用是会在父目录新增一个dbeaver-common目录,需要你确认当前目录有写入权限;
  3. 执行 dbeaver-common 提供的 Maven wrapper:
"$DBEAVER_COMMON_DIR/mvnw" clean install -Pproduct-dbeaver-ce,product-dbeaver-eclipse-ce,appstore -T 1C -f "$AGGREGATE_DIR"

其中AGGREGATE_DIRproduct/aggregate。脚本在 Maven 成功后打印Build completed successfully(脚本自身的日志消息)。

tools/build.cmd(Windows):同样在缺失时克隆dbeaver-common,然后执行dbeaver-common\mvnw.cmd clean package -Pproduct-dbeaver-ce,product-dbeaver-eclipse-ce,appstore -T 1C,指向%workspaceDir%\dbeaver\product\aggregate——即 Windows 脚本假设 dbeaver 仓库检出在dbeaver命名的子目录中,目录结构不符时-f路径会指向不存在的位置。

两条文档路径的差异(按文档如实保留,未做统一):AGENTS.md 使用系统mvn执行packagetools/build.sh使用 dbeaver-common 的mvnw执行clean install并额外加上appstoreprofile;tools/build.cmd使用mvnw.cmd clean package同样带appstoreprofile。appstoreprofile 不在 product/pom.xml 的三个 profile 之列。

结果验证与判断

  • 单 bundle 运行失败、全量命令成功:与文档记录的"单 bundle 通常失败"一致,无需进一步处理该目录;后续验证改动以全量mvn verify为准。
  • 全量构建脚本运行:以 tools/build.sh 为例,脚本带set -e,Maven 失败会直接中断,看到Build completed successfully说明聚合构建(含 dbeaver-common、datadam-api、dbeaver 三个模块树)成功。
  • 与 CI 对齐:PR 检查工作流 .github/workflows/push-pr-devel.yml 的 build 任务使用的参数是project-directory: ./dbeaver/product/aggregateproject-deps: ./dbeaver/project.depsmvn-args: -Pproduct-dbeaver-ce,product-dbeaver-eclipse-ce,另有一个独立的 checkstyle 检查任务。本地复现 CI 失败时,按这套参数组合在dbeaver-common所在的父目录执行,可以排除"本地与 CI 参数不一致"这一变量。

限制

  • 文档只给出"单 bundle 构建/测试通常失败"这一结论性说明,没有针对具体报错日志的逐条诊断表;排查能落到"是否单 bundle 独立运行、前置仓库与 JDK 是否满足"这一层。
  • 依赖问题(缺少第三方类、缺 bundle)应到Require-Bundle头与 P2 仓库配置中找原因,pom.xml不是 bundle 间依赖的声明位置。
  • 没有"只运行某一个测试插件"的文档化命令;改动验证只能走全量mvn verify,耗时以实际机器为准,文档未给出固定时长。

【免费下载链接】dbeaverFree universal database tool and SQL client项目地址: https://gitcode.com/GitHub_Trending/db/dbeaver

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 14:47:30

节日封面设计:传统文化与现代技术的融合实践

1. 项目背景与核心价值这个新年封面设计项目源于一个简单却温暖的需求——在数字化时代为人们提供具有仪式感的节日祝福载体。作为一名经历过十多个春节周期设计项目的从业者&#xff0c;我深刻理解节日视觉素材对社交互动的重要性。这个"金马献瑞"主题封面&#xff…

作者头像 李华
网站建设 2026/9/10 14:47:25

开源软件选择指南与7款实用工具推荐

1. 开源软件的价值与选择标准在数字化时代&#xff0c;开源软件已经成为个人用户和企业的重要选择。与商业软件相比&#xff0c;开源软件具有代码透明、可自由修改、社区支持等显著优势。清华大学开源软件镜像站等国内优质资源站点的建立&#xff0c;更是为国内用户获取开源软件…

作者头像 李华
网站建设 2026/9/10 14:47:10

SpringDataRedis核心实践与性能优化指南

1. SpringDataRedis 核心价值解析SpringDataRedis 是 Spring 生态中用于简化 Redis 操作的模块&#xff0c;它封装了 Jedis、Lettuce 等底层客户端&#xff0c;提供了统一的操作模板和 Repository 支持。我在电商系统的高并发实践中发现&#xff0c;合理使用其特性可使缓存操作…

作者头像 李华
网站建设 2026/9/10 14:46:30

Android SurfaceFlinger黑屏死机问题分析与解决

1. 项目概述&#xff1a;一次SurfaceFlinger黑屏死机事故的深度复盘去年在参与某旗舰机型Android系统定制时&#xff0c;我们遇到了一个诡异的黑屏死机问题&#xff1a;设备在连续使用数小时后会突然黑屏&#xff0c;系统完全无响应&#xff0c;只能强制重启。经过长达两周的排…

作者头像 李华
网站建设 2026/9/10 14:46:26

Nacos Config 持久化、Dump 缓存与历史记录规范深度解析

Nacos Config 持久化、Dump 缓存与历史记录规范深度解析 【免费下载链接】nacos an easy-to-use dynamic service discovery, configuration and service management platform for building AI cloud native applications. 项目地址: https://gitcode.com/GitHub_Trending/na…

作者头像 李华
网站建设 2026/9/10 14:45:39

风光储并网系统Simulink仿真建模与协同控制策略

1. 项目背景与核心价值风光储并网系统作为新能源电力领域的重要研究方向&#xff0c;正在全球范围内获得广泛应用。这个Simulink仿真模型研究项目&#xff0c;聚焦于永磁同步风机、光伏阵列和储能电池组的协同运行控制&#xff0c;为实际工程应用提供可靠的数字仿真平台。我在电…

作者头像 李华