当前位置: 首页 > 知识库问答 >
问题:

Protobuf gRPC-google Protobuf包不存在

相德宇
2023-03-14

我正在尝试实施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外部库中,我有Pro buf-java-3.12.1 jar。

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

classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.14'

在我的应用程序gradle文件中:

apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'

在dependencies中,我添加了:

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

最后,我的proto文件:

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

当我在终端中运行: pro c--version时,这是输出:

libprotoc 3.12.1

我是否必须添加其他内容,或者我在Gradle设置中遗漏了一些内容?

共有1个答案

诸超
2023-03-14

看起来您希望使用protobuf lite(对于Android项目来说很正常):

implementation 'io.grpc:grpc-protobuf-lite:1.35.0'
...
implementation 'com.google.protobuf:protobuf-javalite:3.12.1'

但是,目前您正在生成完整的Pro buf代码。您需要告诉java和grpc-java代码生成器通过选项为lite生成。如grpc-java Android helloworld示例中所示:

protobuf {
    ...
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java { option 'lite' }
            }
            task.plugins {
                grpc { option 'lite' }
            }
        }
    }
}
 类似资料:
  • 我正在尝试在intelliJ中制作一个jar文件。我的目录中保存了所有的java类是C:\transProject\src\cege。在cege中有一个包用户界面,其中有一个类guiMain。而且我已经在我的Main()类中导入了guiMain()。 我有以下代码行: 包装cege; 进口cege。用户界面。圭曼; 当我在intelliJ中使用终端并编写命令时: C:\trafficProject

  • 我正在研究如何从命令行编译Java。我得到的是: 我得到的是: HelloWorld: inner.java 内部2.Java 我正在用编译这个文件,这个文件工作得很好。 现在我的理解是,因为helloworld.java在它的import语句中引用了其他包,所以javac会去编译这些包。我猜对于所有的Java包,javac在内部都有。 反正-如果我在helloworld.java中添加以下导入行

  • 我得到了一个可怕的软件包,它根本不存在,简直要了我的命。代码很好,我在市场上有运行代码的应用程序。 现在它正在影响简单的应用程序。o.0 <代码>R.string。app_name是错误的my 。应该对应于R.java

  • 我使用的是openjdk版本“1.8.0_252”,我还单独安装了javafx,目前的版本是javafx.version=11.0.2-internal。我已经在IntelliJ中添加了javafx库路径。编写代码javafx对时没有错误。但是,当我使用sudo mvn clean install构建项目时,我出现了以下错误,导致构建失败:

  • 我是编译Hadoop代码的新手,知道这个问题已经被回答过多次了。但是,我仍然很难找到正确的类路径来编译WordCount.java代码。我正在运行一个CentOS版本7。 我的Hadoop版本是: 当我执行echo$path时,我得到了以下结果: 有人能给我指个正确的方向吗?谢谢你。

  • 我是新手,正在尝试为JavaCard开发一个applet。当我从一个网站上跟踪一个示例代码时,我被困在这里了。NetBeans表示JavaCardX.Framework包不存在。 我就不会正确地链接Java经典Jar文件。请帮帮我

  • 朋友们请帮忙。。。。我已经导入了twitter4j-core-4.0.4。jar在Play框架中引用库。因此,Java代码中没有错误,因为我已经导入了require包。。。。但当我运行activator时,我无法找到所有导入的符号。我从/home/intel/JARS/twitter4j-4.0.4/lib/twitter4j-core-4.0.4导入了Jar。jar Twitter控制器。爪哇请