Java 无法使用协议缓冲区3.1.0进行编译
我下载/安装了ProtocolBuffers3.1.0,并使用protoc编译了一个.proto文件,该文件为我生成了一个.java类 有了这一变化,一切都正常运转。 然后,我用最新版本替换了avro JAR,并尝试再次编译我的项目,但没有成功,它抱怨这个错误: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
# 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。” 谢谢