我尝试使用Gradle在Java中构建gRPC和protobuf应用程序
我遵循了来自https://github.com/grpc/grpc-java/blob/master/README.md
的指示问题是未生成一个文件:* ServiceGrpc.java 但是相应的* ServiceGrpc.class文件位于gradle构建生成的构建目录中。
我尝试使用协议protoc手动运行编译器,但是存在完全相同的问题(我在Ubuntu 18.04上)
这是我的原始文件
syntax = "proto3";
option java_multiple_files=true;
option java_generic_services= true;
//...//
message Track {
int64 id = 1; //... }
service TrackService {
rpc Create(Track) returns (Response); }
//...
文件Track.java,TrackOrBuilder.java,TrackOuterClass.java都在那里。以及它们在构建目录中的相应.class文件。
使用标志“ option java_generic_services = true”,将生成TrackService.java,并再次生成.class文件。
但是无论如何,都不会创建TrackServiceGrpc.java文件,相反,它对应的.class文件非常混乱。
这是我的build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.8'
}
}
plugins {
id 'java'
}
repositories {
mavenCentral()
}
apply plugin: 'com.google.protobuf'
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.9.0"
generateProtoTasks.generatedFilesBaseDir = 'src'
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.23.0'
}
}
generateProtoTasks {
all()*.plugins {
grpc {}
}
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
//https://github.com/grpc/grpc-java/blob/master/README.md
implementation 'io.grpc:grpc-netty-shaded:1.23.0'
implementation 'io.grpc:grpc-protobuf:1.23.0'
implementation 'io.grpc:grpc-stub:1.23.0'
compile group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'
}
我在做什么错了?
答案 0 :(得分:0)
如果存在用于gRPC服务的.class文件,则相应的.java文件必须位于某个位置。默认情况下,它应显示在$generatedFilesBaseDir/{main, test}/grpc
中。默认情况下,$generatedFilesBaseDir
是$buildDir/generated/source/proto
。但是似乎您已经更改(或打算更改)generatedFilesBaseDir
,该配置应在protobuf
闭包内而不是protoc
闭包内完成。
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.9.0"
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.23.0'
}
}
generatedFilesBaseDir = 'src'
generateProtoTasks {
all()*.plugins {
grpc {}
}
}
}
此外,需要提及的是不建议配置generatedFileBaseDir
,因为它可能存在潜在的问题。请参见https://github.com/google/protobuf-gradle-plugin/issues/332