微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Protobuf gRPC - google protobuf 包不存在

如何解决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

在我的项目 gradle 文件中,我已将此添加到依赖项:

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 举报,一经查实,本站将立刻删除。