Java 无法使用协议缓冲区3.1.0进行编译

Java 无法使用协议缓冲区3.1.0进行编译,java,serialization,protocol-buffers,avro,Java,Serialization,Protocol Buffers,Avro,我下载/安装了ProtocolBuffers3.1.0,并使用protoc编译了一个.proto文件,该文件为我生成了一个.java类 有了这一变化,一切都正常运转。 然后,我用最新版本替换了avro JAR,并尝试再次编译我的项目,但没有成功,它抱怨这个错误: # Compile: pregen/media.proto pregen/media.proto/serializers/protobuf/media/MediaContentHolder.java:828: error: cannot

我下载/安装了ProtocolBuffers3.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
我做了很多搜索/研究,但仍然没有运气,我也看了这篇最相关的帖子: 然后我将生成的.java文件与protobuf.3.1.0.jar一起编译成一个新的jar,并将其放在我的lib/下,但该项目仍然无法编译

请提供有关如何解决此问题的帮助


(我正在使用一个开源软件对Java序列化性能进行基准测试,我也在那里发布了一个更详细的问题。)

该开源项目的一位作者帮助我解决了这个问题,并将解决方案复制到这里:

“问题是avro-tools-1.8.1.jar捆绑了一些Protobuf 类文件(ugh)。绑定的类文件与 我们生成的Protobuf代码依赖于

对于类路径上的内容,我们非常快速和随意;我们只包括 “lib/*.jar”。最好在某些时候更精确地处理依赖关系 重点

但作为一个快速修复,我将avro-tools-1.8.1.jar放在了“lib/extra/”中,所以它不会出现 默认情况下获取。Makefile现在专门引用 只有当我们需要运行Avro代码生成器时,才会使用JAR。”

谢谢