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

Cannot compile with protocol buffers 3.1.0

I downloaded/installed protocol buffers 3.1.0 并使用 protoc 编译生成 .java class 的 .proto 文件我.

有了这个改变,一切都works/compiles。 然后我用最新版本替换了 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

我做了很多 search/research 仍然没有运气,还看了这个最相关的 post: Problems using protobufs with java and scala 然后我将生成的 .java 文件与 protobuf.3.1.0.jar 一起编译到一个新的 jar 中,并将其放在我的 lib/ 下,但该项目仍然无法编译。

请问关于如何解决这个问题的任何帮助?

(我也在那里使用开源 project to benchmark Java serialzation performance, and I've posted a more detailed question/issue。)

那个开源项目的一位作者帮我解决了issue,把解决方案也复制到这里:

“问题是 avro-tools-1.8.1.jar 捆绑了一些 Protobuf class 个文件(呃)。捆绑的 class 文件与这些文件不兼容 我们生成的 Protobuf 代码依赖于。

我们对 class 路径上的内容非常快速和松散;我们只包括 "lib/*.jar"。在某些情况下更精确地依赖依赖会很好 点.

但作为快速修复,我将 avro-tools-1.8.1.jar 放在 "lib/extra/" 中,所以它不会 默认情况下被拾起。 Makefile 现在特别引用了 JAR 只有在我们需要的时候才会运行 Avro 代码生成器。"

谢谢。