You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitbucket多步骤流水线中Gradle增量构建失效问题排查

解决Bitbucket多步骤流水线中Gradle增量构建失效问题

从你提供的日志来看,核心问题是Gradle的compileJava任务检测到注解处理器生成目录和头文件输出目录缺失,因此判定任务需要重新执行,即使你已经缓存了build和.gradle目录。以下是针对性的解决步骤:

  • 补全流水线产物配置
    确保Bitbucket流水线的产物规则覆盖所有Gradle任务的输出目录,包括子模块的generated目录。将产物配置改为:

    artifacts:
      - '**/build/**'
      - '**/.gradle/**'
    

    用**通配符确保子模块(比如core)的build下所有子目录都被作为产物保留,避免遗漏generated这类细分目录。

  • 验证编译步骤的目录完整性
    在编译步骤的末尾添加检查命令,确认缺失的目录确实存在:

    find ./core/build/generated -type d
    

    如果输出中没有日志里提到的两个目录,说明你的编译任务本身没生成它们(比如项目没有使用注解处理器),但Gradle仍在追踪这些输出属性。

  • 调整Gradle任务配置
    如果项目不需要注解处理器生成代码或头文件,直接在build.gradle中禁用这些输出目录的追踪:

    tasks.withType(JavaCompile) {
        options.generatedSourceOutputDirectory = null
        options.headerOutputDirectory = null
    }
    

    或者自定义任务的最新性判断条件,忽略空目录的影响:

    tasks.withType(JavaCompile) {
        upToDateWhen {
            def classDir = file("${buildDir}/classes/java/main")
            // 只要编译后的class文件存在且输入无变更,就认为任务已最新
            classDir.exists() && !inputs.hasSourceChanges()
        }
    }
    
  • 保留空目录(如果需要)
    如果这些目录确实是空的但Gradle仍需要它们存在,在编译步骤末尾手动创建:

    mkdir -p ./core/build/generated/sources/annotationProcessor/java/main ./core/build/generated/sources/headers/java/main
    

    避免CI系统自动清理空目录导致测试步骤中缺失。

内容的提问来源于stack exchange,提问作者Django

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:09:24