Gradle protobuf任务未从依赖项中提取定义

Gradle protobuf任务未从依赖项中提取定义,gradle,protocol-buffers,grpc,grpc-java,protobuf-java,Gradle,Protocol Buffers,Grpc,Grpc Java,Protobuf Java,我有两个Gradle子项目,它们基本上都是哑protobuf容器。一个子项目需要从另一个子项目导入定义,但我似乎不知道如何让protobuf-Gradle插件正常工作(我对Gradle还比较陌生) 这里有一个例子 目录布局: build.gradle settings.gradle gradle.properties dependency/ | - build.gradle - src/main/proto/dependency.proto main/ | - build.gradle

我有两个Gradle子项目,它们基本上都是哑protobuf容器。一个子项目需要从另一个子项目导入定义,但我似乎不知道如何让protobuf-Gradle插件正常工作(我对Gradle还比较陌生)

这里有一个例子

目录布局:

build.gradle
settings.gradle
gradle.properties
dependency/
|
 - build.gradle
 - src/main/proto/dependency.proto
 main/
|
 - build.gradle
 - src/main/proto/main.proto
build.gradle(顶级)

格雷德尔酒店

rootProject.name = 'sample'

include 'main'
include 'dependency'
格拉德尔酒店

group=sample
version=0.1.0
依赖项/build.gradle

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.11.0"
    }
}

dependencies {
    compile 'com.google.protobuf:protobuf-java:3.11.4'
    compile 'com.google.protobuf:protobuf-java-util:3.11.4'
}
protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.11.0"
    }
    plugins {
        grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:1.27.2'
        }
    }
    generateProtoTasks {
        all()*.plugins {
            grpc {}
        }
    }
}

dependencies {
    compile 'com.google.protobuf:protobuf-java:3.11.4'
    compile 'com.google.protobuf:protobuf-java-util:3.11.4'

    protobuf project(':dependency')
}
dependency/src/main/proto/dependency.proto

syntax = "proto3";

package dependency;

option java_package = "dependency";

message DependencyRequest {
        string foo = 1;
}

message DependencyResponse {
        string bar = 1;
}
main/build.gradle

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.11.0"
    }
}

dependencies {
    compile 'com.google.protobuf:protobuf-java:3.11.4'
    compile 'com.google.protobuf:protobuf-java-util:3.11.4'
}
protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.11.0"
    }
    plugins {
        grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:1.27.2'
        }
    }
    generateProtoTasks {
        all()*.plugins {
            grpc {}
        }
    }
}

dependencies {
    compile 'com.google.protobuf:protobuf-java:3.11.4'
    compile 'com.google.protobuf:protobuf-java-util:3.11.4'

    protobuf project(':dependency')
}
main/src/main/proto/main.proto

syntax = "proto3";

package main;

option java_package = "main";

import "dependency/dependency.proto";

service MainService {

    rpc CallDependency(DependencyRequest) returns (DependencyResponse) {}

}
当我尝试构建时,会出现以下错误:

$ ./gradlew :main:compileJava
> Task :main:generateProto FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':main:generateProto'.
> protoc: stdout: . stderr: dependency/dependency.proto: File not found.
  main.proto:7:1: Import "dependency/dependency.proto" was not found or had errors.
  main.proto:11:24: "DependencyRequest" is not defined.
  main.proto:11:52: "DependencyResponse" is not defined.

我读了很多书,但一直没能让它发挥作用。知道protobuf任务为什么没有拾取dependency.proto吗?

显然protobuf文件设置正确,但包名不匹配导致main.proto无法找到dependency.proto。我可以通过删除protobuf定义中的包名来实现这一点


如果将来有人遇到此问题,请检查您的包名和导入以确保它们正确。

显然protobuf文件设置正确,但包名不匹配导致main.proto无法找到dependency.proto。我可以通过删除protobuf定义中的包名来实现这一点

如果将来有人遇到这个问题,请检查您的包名和导入以确保它们是正确的