protoc生成的类会生成编译错误

时间:2012-12-26 11:31:12

标签: protocol-buffers

我创建了一个简单的.proto文件并执行了编译器(protoc-2.5.0rc1-win32.zip)。生成了一个java文件到指定的包。但是,生成的文件无法编译。 .proto文件很简单,只有一条简单类型的可选字段(编号正确)。 .java文件无法编译,例如:

  • 构造函数GeneratedMessage.FieldAccessorTable(Descriptors.Descriptor,String [])未定义
  • 对于GeneratedMessage.FieldAccessorTable类型,未定义方法ensureFieldAccessorsInitialized(Class,Class)
  • ...以及同一行中的其他错误(如尝试覆盖超类中的最终方法)

错误暗示API版本的某些不匹配? 有什么想法吗?

由于 已解决:发现我使用的API所期望的proto版本是2.4.1而我使用的是最新版本。

3 个答案:

答案 0 :(得分:2)

对我来说,我将其追溯到,包括较旧的原型缓冲版本,并且版本存在冲突。

解决方案:检查所有库中旧版本的原型缓冲区,它可能包含在您已经存在的内容中。

答案 1 :(得分:2)

我解决了同样的问题。 答案: 1.显示你的protoc编译器版本

e.g。 D:\ workspace2 \ monitor \ src \ main \ resources> protoc --version libprotoc 2.6.1

2.使protoc jar与protoc complier版本重合

e.g。

- (UnliimitedEntriesPurchase *)unlimitedEntriesPurchase
{
    if (!_unlimitedEntriesPurchase)
    {
        _unlimitedEntriesPurchase = [[UnliimitedEntriesPurchase alloc] init];
        _unlimitedEntriesPurchase.delegate = self;
    }
    return _unlimitedEntriesPurchase;
}

答案 2 :(得分:0)

我的猜测是你首先需要从源代码发布protobuf-2.5.0rc1.zip构建一个新的协议buf jar(protobuf-java-2.5.0rc1.jar)并使其成为你的本地“系统”依赖maven pom.xml。如果我只使用新编译器生成新的Java存根但在我的pom中具有旧的2.4.1 jar依赖性,我也会遇到编译错误。我找不到一个托管已经构建的2.5.0rc1.jar的maven存储库。如果您只是从源代码发布中获取源文件,则会遗漏一些类文件,例如com.google.protobuf.DescriptorProtos。*。