使用带有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
希望这可以帮助