首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 嵌入开发 >

Invalid embedded descriptor for "proto"Dependencies passed (Protobufer

2013-09-07 
Invalid embedded descriptor for .proto.Dependencies passed (Protobufer)解决办法前言  之前开发的时

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 "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包路径,造成了一些问题,实际上理解了之后还是很简单的。以后要吸取教训。

  全文完。。。。

    

  

  

    



热点排行