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

如何阻止生成的Java Protobuf文件被创建在Gradle构建目录中?

问题描述

我已经在build.gradle中配置了将Java Protobuf文件生成到指定目录:

sourceSets {
main {
    proto {
        srcDir("src/main/java/proto")
    }
}

protobuf {
  protoc { artifact = "com.google.protobuf:protoc:$protocVersion" }
    plugins {
      grpc {
        artifact = "io.grpc:protoc-gen-grpc-java:$grpcVersion"
     }
   }
  generateProtoTasks {
    ofSourceSet("main").forEach {
        it.plugins {
            grpc
        }
     }
  }

  generatedFilesBaseDir = "src/main/java/proto"
}

但文件依然会在Gradle构建目录中生成,导致生成的Java Protobuf文件将构建目录中的文件视为重复项,引发问题。请问有没有办法阻止文件在构建目录生成,仅让Java Protobuf文件生成到我指定的目录中?

解决方案

问题核心是generatedFilesBaseDir仅会将你指定的目录追加到生成路径前,不会覆盖Gradle默认的构建目录输出逻辑。要实现仅输出到指定目录,需修改生成任务的输出路径,并调整sourceSets避免重复识别。

具体修改步骤:

  1. 移除generatedFilesBaseDir配置,逐个指定generateProtoTasks的输出目录
  2. 给sourceSets添加排除规则,避免识别构建目录中的文件

修改后的build.gradle配置如下:

sourceSets {
    main {
        proto {
            srcDir("src/main/java/proto")
        }
        // 排除构建目录,防止重复识别文件
        java {
            exclude '**/build/**'
        }
    }
}

protobuf {
    protoc { artifact = "com.google.protobuf:protoc:$protocVersion" }
    plugins {
        grpc {
            artifact = "io.grpc:protoc-gen-grpc-java:$grpcVersion"
        }
    }
    generateProtoTasks {
        ofSourceSet("main").forEach { task ->
            // 配置普通Protobuf生成文件的输出目录,不创建默认子目录
            task.builtins {
                java {
                    outputSubDir = ''
                }
            }
            // 配置gRPC生成文件的输出目录
            task.plugins {
                grpc {
                    outputSubDir = ''
                }
            }
            // 强制指定任务输出到目标目录,覆盖默认构建目录输出
            task.outputs.dir("src/main/java/proto")
        }
    }
}

额外说明:

  • 设置outputSubDir = ''是为了避免生成的文件被放到默认的java子目录,直接输出到指定根目录
  • task.outputs.dir会强制覆盖任务的默认输出路径,不再向构建目录写入文件
  • sourceSets的排除规则是双重保险,防止Gradle误将构建目录的旧文件当作源码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:40:26