Gradle protobuf任务未从依赖项中提取定义
我有两个Gradle子项目,它们基本上都是哑protobuf容器。一个子项目需要从另一个子项目导入定义,但我似乎不知道如何让protobuf-Gradle插件正常工作(我对Gradle还比较陌生) 这里有一个例子 目录布局: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
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定义中的包名来实现这一点 如果将来有人遇到这个问题,请检查您的包名和导入以确保它们是正确的