gpt4 book ai didi

java - gradle 的 Protobuf 插件不生成服务类

转载 作者:行者123 更新时间:2023-12-01 13:45:59 24 4
gpt4 key购买 nike

我尝试使用 Gradle 在 Java 中构建 gRPC 和 protobuf 应用程序

我按照以下说明进行操作:https://github.com/grpc/grpc-java/blob/master/README.md

问题是没有生成一个文件:*ServiceGrpc.java
但是对应的*ServiceGrpc.class文件在gradle build生成的build目录下。

我尝试使用命令 protoc 手动运行编译器,但我遇到了完全相同的问题(我在 Ubuntu 18.04 上)

这是我的原型(prototype)文件

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'
}

我究竟做错了什么 ?

最佳答案

如果 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 上的讨论

关于java - gradle 的 Protobuf 插件不生成服务类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57696043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com