当前位置: 首页 > 知识库问答 >
问题:

protoc生成的类生成编译错误

滑文昌
2023-03-14

我创建了一个简单的. proto文件并执行了编译器(protoc-2.5.0rc1-win32.zip)。为规定的包生成了一个java文件。但是,生成的文件不会编译。. proto文件很简单,只有一条消息,其中包含一堆简单类型的可选字段(正确编号)。. java文件不编译,例如:

  • 构造函数生成了消息。FieldAccessorTable(Descriptors.Descriptor,字符串[])未定义
  • 对于类型GeneratedMessage,未定义方法ensureFieldAccessorsInitialized(Class,Class)。现场可访问性
  • 。。。以及沿着同一条线的许多其他错误(比如试图重写超类中的最后一个方法)

提示API版本级别不匹配的错误?有什么想法吗?

感谢解决:发现我使用的API期望的proto版本是2.4.1,我使用的是最新版本。

共有3个答案

穆阳嘉
2023-03-14

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

尚嘉勋
2023-03-14

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

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

乐正育
2023-03-14

我已经解决了同样的问题。答案是:1。显示您的protoc编译器版本

e、 g.D:\workspace2\monitor\src\main\resources

2.make协议jar与您的协议编译器版本重合

例如。

<dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>2.6.1</version>
        </dependency>
 类似资料:
  • 我试图从protobuf生成java类。 下面是我的协议- 我运行命令main/exec/protoc--java\u out=main/java main/proto/datamodel。协议 该协议是从链接https://github.com/protocolbuffers/protobuf/releases/tag/v3.7.1下载的,osx-x86_64.zip.我也尝试了3.8.0和3.

  • []Flutter(Channel master,v1.4.12-pre.27,on Linux,locale en_us.utf-8)•Flutter版本1.4.12-pre.27 at/home/jeremy/fluttersdk/Flutter•Framework修订版a12c5618de(5小时前),2019-04-08 11:22:19-0400•Engine修订版ff1bcdc009•

  • 我们试图从Jenkins构建一个maven工件并将其部署到我们的Nexus存储库管理器中,但是我们在构建过程中遇到了编译错误。这就是我们得到的错误! 错误]无法执行目标org.apache.maven.plugins:maven-compiler-plugin:3.5.1:在项目上编译(default-compile)studentapp:编译失败错误]此环境中没有提供编译器。您可能是在JRE上运

  • 我目前在编译protobuf生成的C代码时遇到了一些问题<代码>协议(code>protoc)运行正常,不会显示任何警告,但是,当我尝试编译生成的C代码以便构建静态库时,g向我显示以下消息: CanInfo。pb。抄送:107:5:错误:“::protobuf\u BusType\u 2eproto”尚未声明107;::protobuf\u BusType\u 2eproto::AddDescri

  • 我正在尝试创建一个自定义注释,例如,确保字段或方法既是又是,如果字段或方法既不是又不是,则会生成编译时错误,如以下示例所示: 到目前为止,我已经完成了两个自定义注释接口: 和: 正如所暗示的,我不知道如何生成编译时错误。Processor的文档清楚地表明我不应该抛出异常, 如果处理器抛出未捕获的异常,该工具可能会停止其他活动注释处理器。 它接着描述了当提出错误条件时会发生什么,现在是如何提出错误条