`

Invalid embedded descriptor for ".proto".Dependencies passed (Protobufer)解决办法

阅读更多

开发的时候,发现居然出现了Dependencies passed to FileDescriptor.buildFrom() don't match those listed in the FileDescriptorProto.的错误,还有Protocol Buffers Invalid embedded descriptor problem等错误,上网google了很久也没找到解决方法,最终经过设断点找官方文档,才把问题解决了。然后分享下解决问题的方法和过程。

 

一、找到出现bug的原因

看到报错了之后,就去设断点,用debug模式,弄明白为什么会出问题,通过设断点知道if (!dependencies[i].getName().equals(proto.getDependency(i))) {这里出现问题了,原因是两个地方的依赖不一样,这个涉及到proto文件的命名空间Package,import引入的文件,生成的java包路径等问题。因为两个值不相等,所以找到问题的原因所在,然后去看了自己的proto文件。一个是这样的:

import "descriptor.proto";
package com.pwrd.zs;

extend google.protobuf.MessageOptions {
  optional int32 msgid = 54321;
}


另一个是谷歌的descriptor.proto文件,由于这个文件的import和package没有正确使用,所以有问题,会报错!

 

 

package google.protobuf;
option java_package = "com.google.protobuf";
option java_outer_classname = "DescriptorProtos";

 

 

二、解决问题

1、java包路径和proto文件的命名空间。只要统一两边的依赖和命名空间以及正确设置好java包路径即可,在proto文件中,如果存在package声明无java_package声明,则说明该proto文件所在命名空间和生成的java包路径是一样的,如果有java_package则这个声明的为生成的java包路径,pacakge则只表示proto文件的命名空间,不表示java包路径!

2、两个文件的依赖关系(import)。即import引用的文件代表依赖关系,且import引用的要在对应的命名空间里引用,比如两个文件都在同个目录下,可以直接引用import "descriptor.proto",但是由于第一个文件的package命名空间是在google.protobuf里面,所以实际上是引用不到的,这样就会出问题,只要将descriptor.proto文件放在其google文件夹下的protobuf的文件夹下即可,然后import  “google/protobuf/descriptor.proto”,这样就解决了第二个问题!

最后结果如下:

 

import "google/protobuf/descriptor.proto";

option java_package = "com.pwrd.zs.common.msg";
option java_outer_classname = "Options";

extend google.protobuf.MessageOptions {
  optional int32 msgid = 54321;
}

 

 

 

三、总结

由于历史遗留下的问题,将两个proto放在同个目录下,然后package不一致出现了错误,没有正确理解package命名空间和import的概念及对应的生成的java包路径,造成了一些问题,实际上理解了之后还是很简单的。以后要吸取教训。

 

 

http://www.cnblogs.com/riskyer/archive/2013/09/05/3303961.html

分享到:
评论

相关推荐

    解决 Protel 99 SE 'Format '%x' invalid or...

    通过以上步骤,你应该能够解决"Format '%x' invalid or"的错误,并恢复正常的设计工作。在使用Protel 99 SE或其他设计软件时,保持软件更新、理解文件格式和定期备份都是非常重要的实践,能帮助避免或减少不必要的...

    jspdf html页面生成pdf

    **正文** JSPDF 是一个流行的JavaScript库,用于在客户端生成PDF文档。...在Web应用程序中,这种功能尤其有用,因为它提供了从网页直接创建文档的便利性。 ...它使用了Canvas元素来渲染图形,同时支持SVG(Scalable ...

    org.xml.sax.SAXException: Invalid element

    NULL 博文链接:https://wilian.iteye.com/blog/1992365

    Invalid name=”com.alibaba.dubbo.config.ProtocolConfig#0″

    java.lang.IllegalStateException: Invalid name=“com.alibaba.dubbo.config.ProtocolConfig#0” contains illegal character, only digit, letter, ‘-’, ‘_’ or ‘.’ is legal 原因: 如果没有指定id属性,...

    gis9.3卸载出现invalid install.log file状况的方法

    在本案例中,我们遇到的问题是尝试卸载GIS 9.3时遇到了“invalid install.log file”的错误。这通常意味着在卸载过程中,系统无法找到或读取必要的安装日志文件,导致卸载过程受阻。 为了解决这个问题,我们需要...

    arcgis9.3卸载license出现invalid install.log file状况的方法

    在本场景中,用户遇到了“invalid install.log file”的错误,这通常发生在尝试卸载ArcGIS 9.3时,系统无法正确读取或验证安装日志文件。这个错误可能阻碍了卸载过程的正常进行,因此需要采取一些特殊的步骤来解决。...

    ArcGis卸载出现invalid install.log file状况的方法

    两步,帮助大家很容易实现卸载。 (1)下载压缩包并解压得到install.log文件 (2)找到License的默认安转路径,找到卸载工具unwise32.exe,双击打开,选择(1)步下载的install.log文件,并点击next,即可实现完全...

    程序运行时,提示“Invalid parameter”错误

    Delphi 10.3 ,程序运行到DataModule2.ClientDataSet1.ApplyUpdates(0);语句时,提示“Invalid parameter”错误

    cmake-3.18.1-win64-x64.msi

    cmake-3.18.1 64位安装包。官网下载的。

    ftp连接不上出现500 Invalid PORT Command.错误

    331 Password required for 123. PASS xxxxxx 230 User 123 logged in. SYST 215 Windows_NT PWD 257 "/" is current directory. TYPE A 200 Type set to A. PORT 192,168,1,100,17,228 500 Invalid PORT Command. ...

    Android闪退收集

    为了有效地解决这些问题,开发者需要进行Android闪退收集,以便定位并修复错误。以下是一些关于Android闪退收集的重要知识点: 1. **异常捕获与日志记录**: 当应用程序出现未处理的异常时,程序会崩溃。为了收集...

    invalid_cache.csv

    invalid_cache.csv

    Altium Designer 19 原理图复制出现InvalidParameter 报错的解决办法-综合文档

    Altium Designer 19 原理图复制出现InvalidParameter at AdvSch.dll, Base Addre... 报错的解决办法

    invalid multibyte character sequence 870告警1

    Invalid Multibyte Character Sequence 警告解析 在编程中,特别是在嵌入式系统开发中,我们经常会遇到Invalid Multibyte Character Sequence 警告。这个警告通常来自于编译器,告知我们存在非法的多字节字符序列。...

    InvalidSignature-The signature is invalid(解决方案).md

    InvalidSignature-The signature is invalid(解决方案).md

    解决arcgis卸载出现invalid install.log

    打开lisense manager的安装目录,点uninstall,选择下载的install。log,祝各位好运。当然也可以选择window install cleaner up移除。

    jsPDF插件分享,将Html转PDF文件

    jsPDF是由亚历山大·穆拉霍夫(Alexander Mulyakov)开发的开源库,其目标是提供一个完全在客户端生成PDF的解决方案。这个库可以处理文本、图像和基本的图形元素,让你能够创建自定义的PDF文档。jsPDF基于Unicode,...

    org.eclipse.paho.android.service-1.1.1-sources.jar

    Android的MQTT消息推送接收所需jar包,修复了MqttAndroidClient会出现throw new IllegalArgumentException Invalid ClientHandle报错,而源github中代码未更新解决,所以经过重新编译,生成新的jar包,增加...

    Dialogue System for Unity 2.1.2(u2018.1.0).rar

    Dialogue System for Unity 2.1.2(u2018.1.0)可以轻松地为您的游戏添加交互式对话和任务。 它是一个完整,强大的解决方案,包括基于可视节点的编辑器,对话UI,过场动画,任务日志,保存/加载等。 核心是一个精简,...

    cmake-3.18.2.tar.gz

    CMake是一款跨平台的开源构建系统,用于管理软件构建过程。它的主要目标是提供一个统一的、用户友好的界面,让开发者能够在不同的操作系统和编译器之间无缝切换。CMake不直接进行编译,而是生成特定平台的构建系统,...

Global site tag (gtag.js) - Google Analytics