如何解决Protobuf gRPC - google protobuf 包不存在
我正在尝试实施 gRPC,现在我遇到了各种各样的问题,但我只是不明白我做错了什么。我正在关注这个文档: https://github.com/grpc/grpc-java/blob/master/README.md
现在我在尝试构建项目时不断收到此类错误
error: package com.google.protobuf.GeneratedMessageV3 does not exist
com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
在我的 Android Studio 外部库中,我有 protobuf-java-3.12.1 jar。
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.14'
在我的应用程序 gradle 文件中:
apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'
在我添加的依赖项中:
implementation 'io.grpc:grpc-okhttp:1.35.0'
implementation 'io.grpc:grpc-protobuf-lite:1.35.0'
implementation 'io.grpc:grpc-stub:1.35.0'
compileOnly 'org.apache.tomcat:annotations-api:6.0.53'
implementation 'com.google.protobuf:protobuf-javalite:3.12.1'
在 android 标签之外:
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.12.1"
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.35.0'
}
}
generateProtoTasks {
all()*.plugins {
grpc {}
}
}
}
最后,我的原型文件:
Syntax = "proto3";
import "google/protobuf/timestamp.proto";
option java_package = "com.xxx.xxx.proto.log";
option java_outer_classname = "MyClass";
message MyObject {
string name = 1;
string unit = 2;
oneof value {
bool bool_value = 3;
sint32 int32_value = 4;
uint32 u_int32_value = 5;
google.protobuf.Timestamp timestamp_value = 6;
}
}
当我在终端中运行:protoc --version 时,这是输出:
libprotoc 3.12.1
我是否必须添加其他内容,或者我在 Gradle 设置中遗漏了什么?
解决方法
您似乎希望使用 protobuf lite(这对于 Android 项目来说是正常的):
implementation 'io.grpc:grpc-protobuf-lite:1.35.0'
...
implementation 'com.google.protobuf:protobuf-javalite:3.12.1'
但是,目前您正在生成完整的 protobuf 代码。您需要通过选项告诉 java 和 grpc-java 代码生成器为 lite 生成。如 grpc-java Android helloworld example 中所示:
protobuf {
...
generateProtoTasks {
all().each { task ->
task.builtins {
java { option 'lite' }
}
task.plugins {
grpc { option 'lite' }
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。