【问题标题】:Generated class by protoc generates compile errorsprotoc 生成的类会产生编译错误
【发布时间】:2012-12-26 11:31:12
【问题描述】:

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

【问题讨论】:

    标签: protocol-buffers


    【解决方案1】:

    我已经解决了同样的问题。 答案: 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>
    

    【讨论】:

      【解决方案2】:

      对我来说,我追踪到了 ,包括一个较旧的原型缓冲区版本,并且版本冲突。

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

      【讨论】:

        【解决方案3】:

        我的猜测是,您首先需要从源分发 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.*。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-07-10
          • 2016-07-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多