使用带有java和scala的protobufs的问题

我有一个文件xxx.proto 。 我下载了protobuf编译器并安装了它。 然后我发出了这个命令

 protoc --java_out=./ xxx.proto 

它生成了我的xxx.java

现在我想将这个文件编译成一个类文件,我可以使用它与Scala。

 javac xxx.java 

这给了我这个错误

 xxx.java:7: package com.google.protobuf does not exist com.google.protobuf.ExtensionRegistry registry) { ^ xxx.java:12450: package com.google.protobuf.Descriptors does not exist private static com.google.protobuf.Descriptors.Descriptor ^ xxx.java:12453: package com.google.protobuf.GeneratedMessage does not exist com.google.protobuf.GeneratedMessage.FieldAccessorTable ... ... ... 100 errors 

现在我猜,它没有包。

因此,我将com.google.protobuf包的类文件复制到xxx.java所在的同一文件夹中。 注意 – 我没有编译这个包。 我从另一个包含jar文件的扩展中下载了jar。 所以我提取了它们。 现在我xxx.java所在的当前路径有protobuf库的com / google / protobuf / * .class。

我再次发出了javac命令。

这次我得到了一组不同的错误 –

  xxx.java:10: cannot find symbol symbol : class MessageOrBuilder location: package com.google.protobuf extends com.google.protobuf.MessageOrBuilder { ^ xxx.java:215: cannot find symbol symbol : class MessageOrBuilder location: package com.google.protobuf extends com.google.protobuf.MessageOrBuilder { ^ xxx.java:608: cannot find symbol symbol : class MessageOrBuilder location: package com.google.protobuf extends com.google.protobuf.MessageOrBuilder { ^ xxx.java:1017: cannot find symbol symbol : class MessageOrBuilder location: package com.google.protobuf extends com.google.protobuf.MessageOrBuilder { ..... 100 errors 

我甚至试图编译google protobufs附带的源文件。 生成的java类给出了相同的错误。

任何想法该怎么办?

回答

好的。 感谢大家。

主要问题是来自google的协议缓冲编译器包默认创建java库。 我认为它确实安装了它。 如果你正在运行Maven,它确实会这样做。 但我没有maven

所以我编译了/java/src的代码并使用了jar。 ^

编译时,需要在类路径上使用protobuf lib。 所有缺少的包和类都来自protobuf lib。

找到protobuf jar并使用

 javac -cp path/to/protobuf.jar xxx.java 

你是Java新手,对吧?

缺少的是protobuf的java库文件(扩展名.jar)。 它必须位于java编译器和java运行时的“类路径”中。 protoc生成你的类,但它取决于protobuf库。

 javac xxx.java -cp PATH_TO_PROTOBUF/protobuf-java-2.3.0.jar 

在运行时

 java mypackage.MyMain -cp PATH_TO_PROTOBUF/protobuf-java-2.3.0.jar 

您可能需要使用protobuf工具包的2.4.1版(或至少2.4+版), 包括确保更新protoc(protobuf编译器) 使用新的protoc重新编译原型定义。 (换句话说,一切都必须是相同的版本:

  • protobuf-vn.nnjar文件;
  • protoc编译器; 和
  • 使用protoc编译.proto文件的输出

一个我得到了一切同步,我开始向前推进我正在看的Clojure项目。 您可能遇到相同的版本偏斜问题。

protoc -I = $ SRC_DIR –java_out = $ DST_DIR $ SRC_DIR / addressbook.proto

你可以从>>下载protoc.exe(新版本)。

https://code.google.com/p/protobuf/downloads/detail?name=protoc-2.5.0-win32.zip&can=2&q=

在您的* .proto文件中正确配置

 option java_package = "com.example.package"; option java_outer_classname = "class name"; 

可以使用ubuntu a安装protobuf jar文件

 apt-get install libprotobuf-java 

这将复制/ usr / share / java /下的protobuf-java-2.4.1.jar

希望这可以帮助