【发布时间】:2021-04-24 04:21:14
【问题描述】:
这个问题与How do I use gradle to generate go grpc code? 相同,但由于尚未回答,我再次询问。我制作了一个简化的 Gradle 项目,其结构类似于以下内容:
├── build.gradle
└── src
└── main
└── proto
└── helloworld.proto
build.gradle 读取的位置
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.14'
}
}
plugins {
id "com.google.protobuf" version "0.8.14"
id "java"
}
dependencies {
compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.0.0'
implementation group: 'io.grpc', name: 'grpc-protobuf', version: '1.35.0'
implementation group: 'io.grpc', name: 'grpc-stub', version: '1.35.0'
compileOnly group: 'org.apache.tomcat', name: 'annotations-api', version: '6.0.53'
}
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.0.0'
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.0.0-pre2'
}
}
generateProtoTasks {
all()*.plugins {
grpc {}
}
all().each { task ->
task.builtins {
go {}
}
}
}
}
helloworld.proto 取自 gRPC 教程:
syntax = "proto3";
option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
package helloworld;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
如果我运行./gradlew build,我会得到以下生成的源代码:
build/generated/source/
└── proto
└── main
├── go
│ └── helloworld.pb.go
├── grpc
│ └── io
│ └── grpc
│ └── examples
│ └── helloworld
│ └── GreeterGrpc.java
└── java
└── io
└── grpc
└── examples
└── helloworld
├── HelloReply.java
├── HelloReplyOrBuilder.java
├── HelloRequest.java
├── HelloRequestOrBuilder.java
└── HelloWorldProto.java
我已经直接使用protoc 做了类似的事情,并且预计还会有一个helloworld_grpc.pb.go 由带有gRPC 服务器和客户端存根的Go Protobuf 插件生成。如何让 Gradle 生成此代码?
【问题讨论】:
标签: gradle protocol-buffers grpc grpc-java grpc-go