已尝试安装协议缓冲区编译器和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文件)
- 的java/
- 核心/
- 精简版/
- ...
- protobuf_dir/
因此,假如这一切很好,我输入:
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);
有关如何解决问题的任何想法?不明白为什么它不应该编译。尝试看谷歌的网页,但没有出现在这一点上。
意识到我听起来有点无知,尽管我从来没有真正使用过像Github的protobuf这样的库,所以这对我来说都是新的!
编辑:大家好,这个问题已解决完全相同的文件结构。我卸载了protoc2.6.1,设置了我的$ JAVA_HOME和$ PATH变量(您应该将它们存储起来,而不必每次都导出它们),安装maven(正确)。
一切都很好!一切编译顺利。感谢响应者!
descriptor.proto是什么样子的? –
@JoeC不太清楚你要求的是什么。该文件可以在此链接中找到(https://github.com/google/protobuf/blob/master/src/google/protobuf/descriptor.proto),如果这意味着什么,语法字段将设置为“proto2”。 –