我下载/安装了协议缓冲区3.1.0,并使用 protoc 编译.proto文件,为我生成.java类。
通过此更改,一切正常/编译。 然后我用他们的最新版本替换了avro jar并尝试再次编译我的项目,但没有运气,它抱怨这个错误:
# Compile: pregen/media.proto
pregen/media.proto/serializers/protobuf/media/MediaContentHolder.java:828: error: cannot find symbol
com.google.protobuf.Descriptors.OneofDescriptor oneof) {
^
symbol: class OneofDescriptor
location: class Descriptors
pregen/media.proto/serializers/protobuf/media/MediaContentHolder.java:2669: error: cannot find symbol
com.google.protobuf.Descriptors.OneofDescriptor oneof) {
^
symbol: class OneofDescriptor
location: class Descriptors
pregen/media.proto/serializers/protobuf/media/MediaContentHolder.java:4131: error: cannot find symbol
com.google.protobuf.Descriptors.OneofDescriptor oneof) {
^
symbol: class OneofDescriptor
location: class Descriptors
3 errors
我做了很多搜索/研究但仍然没有运气,也看了这篇最相关的帖子:Problems using protobufs with java and scala 然后我将生成的.java文件和protobuf.3.1.0.jar一起编译成一个新的jar并放在我的lib /下,但是项目仍然无法编译。
有关如何解决此问题的任何帮助吗?
答案 0 :(得分:1)
该开源项目的作者之一帮助我解决了issue,并在此处复制了解决方案:
“问题在于avro-tools-1.8.1.jar捆绑了一些Protobuf 类文件(呃)。捆绑的类文件与那些文件不兼容 我们生成的Protobuf代码依赖于。
我们对类路径上的内容非常快速和松散;我们只是包括 “LIB / *。罐子”。在某些情况下更精确地依赖依赖项会很好 点。
但作为一个快速修复,我把avro-tools-1.8.1.jar放在“lib / extra /”中,所以它不会 默认情况下获取。 Makefile现在专门引用它 JAR只在我们需要运行Avro代码生成器时。“
感谢。