Skip to content

Java 本地增量构建可能使用旧 core 编译产物 #870

Description

@songxychn

发布任务 #868 纳入 #867 时复现:已有 front/core/lib 的本地工作区,Java 构建可能使用升级前的 core 编译产物。此次正式发布候选已通过显式前端编译、重新执行 Java 标准验证与 Java/Go 12 文件字节一致性验收;本 issue 跟踪本地增量构建的可重复性,不扩大 #869 的发布实现范围。

复现场景:

  1. 旧发布候选 8d7ef1e872a34b2107500b18dadbe091264bc858 已运行前端标准脚本,存在 TypeScript 5.9 / ES5 编译的被忽略 front/core/lib。
  2. 普通合并包含 迁移 OAS3 工作区到 TypeScript 6.0.3 #867 的 master 8f4c0c731706a417f328865fd5958d43f173a7d9,OAS3 升为 TypeScript 6.0.3,core target 变为 ES2015;已有 lib 不随 Git 更新。
  3. 先运行 Java17 ./tools/test-java.sh。bun-install 日志只更新1个package,没有重新生成 core/lib;随后 Vite 从 package main lib/index.js 消费旧输出。Java14smoke通过不证明所有内嵌资源来自当前源码。
  4. 再运行 ./tools/test-front-core.sh 与 ./tools/sync-knife4x-ui.sh --check,前端显式build生成当前产物。对照此前Java WebJar,入口JS字节不一致。

实际证据:

  • 首次WebJar入口:4,582,852 bytes,SHA256 b54c81f58cce4236920d7323a680a7516a83d4ee267413b77b67792a43755102,对应升级前输出。
  • 当前前端/Go入口:4,558,495 bytes,SHA256 49e20a507f54953d5a06ed914e62c4843d33dff27bb4a69e484427fa8471d1af。
  • 显式front build后重新运行完整Java标准脚本,14smoke通过,生产WebJar与Go static全部12文件逐字节一致。
  • 独立fresh checkout首次 bun install --frozen-lockfile 生成core192/schema32文件,与显式build逐字节一致。Release workflow使用freshcheckout并只缓存Maven,未缓存core/lib;本次并未复现正式发布冷构建使用旧输出。

待处理范围:让Java UI增量构建明确消费当前core/schema产物,或建立足以检测旧产物的门禁;冷/热工作区都应与显式前端build一致。实施前按AGENTS冻结验证范围并独立审查;涉及POM/构建流程的真实diff与证据需重点检查,不在发布PR临时修改CI逻辑。

Activity

  1. added
    bugSomething isn't working
    agent-taskTask tracked by autonomous agent workflow
    status:readyReady for an agent to pick up
    area:javaJava / Maven modules
    area:repoRepo-wide config, CI, tooling
    status:in-progressAn agent is actively working on this
    and removed
    status:readyReady for an agent to pick up
    on Oct 11, 2026
  2. songxychn commented on Oct 11, 2026

    @songxychn
    OwnerAuthor

    开始处理,基线为当前 master d5db1835。

    冻结本次契约:

    • 支持版本沿用现有 Java 17 验证基线、Node 22.13+/24+、Bun 1.4.0 与当前锁文件(TypeScript 6.0.3),不修改兼容承诺或依赖版本。
    • 范围:knife4j-openapi3-ui Maven 生命周期在 Vite 前显式编译 knife4j-core 与 knife4j-schema-engine;真实冷/热工作区回归门禁接入现有 Java 标准脚本。
    • 外部行为:冷工作区,以及已有过时 JS/声明的热工作区,生产 WebJar 的完整文件集合与字节必须等于当前源码显式 core/schema + Vite 构建;core/schema 编译失败必须阻止打包。
    • 非目标:CI workflow、发布流程、版本升级、OAS2、UI 产品行为及 Go 宿主实现。仅核对已有 Go 静态 UI 一致性,不扩大发布任务 发布 Java 5.7.7 与 Knife4x Go v0.8.6 #868/发布:准备 Java 5.7.7 与 Go v0.8.6 #869。
    • 验证:修复前隔离工作区真实 Maven 冷/热构建复现;修复后同一断言转绿;./tools/test-java.sh、./tools/test-front-core.sh、./tools/sync-knife4x-ui.sh --check;独立 reviewer 对当前 base/head 的真实 diff 与构建证据重点审查,当前 head PR CI 通过后才进入 status:review。

    正在执行修复前回归:复制实际 POM 与跟踪源码到临时工作区,以完整 Maven package 和显式前端构建对照,再向已安装工作区的两个包 lib 注入可追踪的过时 JS/声明,复用同一 Maven 生命周期。无污染原工作区的编译产物。

  3. songxychn commented on Oct 11, 2026

    @songxychn
    OwnerAuthor

    已在未修复的当前 master d5db1835 复现。

    命令(Java 17,Bun 1.4.0,Node 24.11.0):

    python3 knife4j/knife4j-openapi3-ui/src/test/scripts/test-current-workspace.py

    该新回归脚本复制实际 POM、跟踪源码及 formatter 资源到临时工作区,执行完整 mvn package(启用现有 UI 资源 smoke),与显式 core/schema build + 同参数 Vite 构建对照。冷构建通过;然后保持源码/锁文件/node_modules 不变,只向两个包已编译的 index.js 与 index.d.ts 注入过时标记,再执行相同 Maven package。

    修复前结果:两次 Maven 都报 BUILD SUCCESS,但热构建回归断言失败:

    Cold workspace PASS: 12 WebJar files match explicit build
    AssertionError: Hot Maven WebJar consumed stale workspace output:
    extra=[], missing=[], changed=['assets/index.js', 'assets/lib.js']
    

    这确认缺陷是安装完成后没有显式重编译工作区包;Maven 成功或 UI 资源存在不保证内容来自当前源码。接下来只在 Vite 前添加 core/schema build,并把该真实回归纳入 Java 标准验证。

  4. songxychn commented on Oct 11, 2026

    @songxychn
    OwnerAuthor

    修复已交付到 PR #871:#871

    当前 head 14b9f31427a5134110c8d5fc3ca734f2f3b94fdd:

    • Maven 在 Vite 前显式编译 core/schema-engine,编译错误阻止继续打包。
    • 修复前红灯同一回归已转绿:真实冷/热工作区的生产 WebJar 全部 12 文件与显式前端构建逐字节一致;两包旧 JS/声明刷新;两包编译失败均在 Vite 前终止。
    • Java 17 ./tools/test-java.sh 通过,14 smoke 模块及配置/兼容门禁通过;前端标准脚本和 Go UI 一致性检查通过。
    • 生产 Java WebJar 与 Go 静态 UI 全部 12 文件一致。
    • 独立 reviewer 一轮 full 审查 approve,无 findings、范围漂移或后续项(审查证据已记录 PR)。
    • 当前 head GitHub CI 全部适用检查通过:https://github.com/songxychn/knife4j-next/actions/runs/38145776666 ,含 Java 标准验证和兼容报告。

    PR 已转为 ready for review;本 issue 转 status:review 等维护者合并。尚未合并或发布,issue 由合并 PR 后关闭。

  5. added
    status:reviewImplementation done, awaiting review/merge
    and removed
    status:in-progressAn agent is actively working on this
    on Oct 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-taskTask tracked by autonomous agent workflowarea:javaJava / Maven modulesarea:repoRepo-wide config, CI, toolingbugSomething isn't workingstatus:reviewImplementation done, awaiting review/merge

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions