1

我创建了一个简单的 .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 并且我使用的是最新版本。

4

3 回答 3

2

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

例如 D:\workspace2\monitor\src\main\resources>protoc --version libprotoc 2.6.1

2.使 protoc jar 与您的 protoc 编译器版本一致

例如

<dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>2.6.1</version>
        </dependency>
于 2015-04-29T08:34:31.787 回答
2

对我来说,我将此,包括一个较旧的原型缓冲区版本,并且版本冲突。

解决方案:检查你所有的库中是否有旧版本的原型缓冲区,它可能包含在你已经拥有的东西中。

于 2013-01-27T00:41:11.030 回答
0

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

于 2012-12-27T17:38:36.620 回答