安装Protocol Buffers时出现编译错误

时间:2017-01-28 14:11:12

标签: 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 /
        • protoc(二进制)
        • protoc_dir /(来自protoc zip文件的其他位和bobs)
      • 的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(正确)。

一切都很好!一切都编译顺利。感谢响应者!

1 个答案:

答案 0 :(得分:2)

  

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

这就是问题 - 你是以某种方式使用protoc 2.6.1而不是3.2.0。这可能是因为你的系统上已经安装了protoc 2.6.1,并且它以某种方式优先于3.2.0。如果你查看descriptor.proto中的错误,你会发现它们发生在reserved关键字上,这是新的; 2.6.1没有支持它。

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