java - 安装Protocol Buffers时出现编译错误

标签 java installation protocol-buffers

一直在尝试安装 Protocol Buffers 编译器和 java 运行时安装,但在编译 java 类时遇到错误。我下载了:

  • protoc-3.2.0rc2-linux-x86_64.zip(虽然说版本是2.6.1)

  • protobuf-java-3.2.0rc2.zip

文件结构如下所示:

  • 项目/
    • protobuf_dir/
      • protobuf 文件/目录,包括 src/和 java/
      • src/
        • 协议(protocol)(二进制)
        • protoc_dir/(protoc zip 文件中的其他内容)
      • java/
        • 核心/
        • 精简版/
        • ...

假设一切正常,我输入:

protoc --java_out=src/main/java -I../src \../src/google/protobuf/descriptor.proto

所以 protoc 似乎工作正常。但后来我不断收到这样的错误,直到我将它们注释掉(不确定这是否是一个问题?):

google/protobuf/descriptor.proto:443:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:443:12: Expected field name.
google/protobuf/descriptor.proto:541:3: Expected "required", "optional", or "repeated".
google/protobuf/descriptor.proto:541:12: Expected field name.

但是当我尝试编译所有 java 类时,我总是收到一条错误消息:

Descriptors.java:1175: error: cannot find symbol
    return FieldDescriptorProto.Type.forNumber(ordinal() + 1);

关于如何解决这个问题有什么想法吗?不明白为什么它不应该编译。尝试查看 Google 的页面,但没有任何结果。

意识到我听起来有点无能,尽管我以前从未真正使用过像 Github 上的 protobuf 这样的库,所以这对我来说是全新的!

编辑:大家好,这个问题已通过完全相同的文件结构解决。我卸载了 protoc2.6.1,设置了 $JAVA_HOME 和 $PATH 变量(你也应该存储它们,而不是每次都导出它们),安装了 maven(正确)。

一切都好!一切都编译顺利。感谢回复者!

最佳答案

protoc-3.2.0rc2-linux-x86_64.zip (although it says the version is 2.6.1)

这就是问题所在——您以某种方式使用协议(protocol) 2.6.1 而不是 3.2.0。这可能是因为 protoc 2.6.1 已安装在您的系统上,并且不知何故它优先于 3.2.0。如果您查看描述符.proto 中的错误,您会发现它们发生在 reserved 关键字上,该关键字是新的; 2.6.1不支持。

使用与 Java 运行时库完全相同版本的 protoc 非常重要,否则生成的代码可能无法正确编译,或者可能编译但无法正确运行。

关于java - 安装Protocol Buffers时出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41910741/

相关文章:

java - 对 Java 8 流进行分区

java - 如何使用 Hibernate 获取 10 个随机唯一对象的列表?

OpenCV Ubuntu 安装问题

linux - 在 Linux 11.04 上安装 TBB

java - 当主机名是 64 个字符时,InetAddress.getLocalHost() 返回错误结果

java - 从插件重新编译反编译的类

Android 系统安装程序 App "Application Not Installed"为什么?这个的日志在哪里?

Delphi Protocol Buffer ?

c++ - 如何从 C++ 原型(prototype)中删除消息字段?

Java:来自字符串的 protobuf