一直在尝试安装Protocol Buffers编译器和java运行时安装,但是在编译java类时我遇到了错误。我下载了:
protoc-3.2.0rc2-linux-x86_64.zip(虽然它说版本是2.6.1)
protobuf-java-3.2.0rc2.zip
文件结构如下所示:
所以假设一切都很好,我输入了:
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(正确)。
一切都很好!一切都编译顺利。感谢响应者!
答案 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版本非常重要,否则生成的代码可能无法正确编译,或者可能编译但无法正确运行。