我有一个文件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所在的当前路径有prot / prot库的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类给出了相同的错误。
任何想法该怎么做??
答案
好。谢谢大家。
主要问题是来自谷歌的协议缓冲编译器包默认创建java库。我认为它确实安装了它。如果你正在运行Maven,它确实会这样做。但我没有maven
所以我在/java/src
中编译了代码并使用了jar。
^
答案 0 :(得分:6)
编译时,需要在类路径上使用protobuf lib。所有缺少的包和类都来自protobuf lib。
查找protobuf jar并使用
javac -cp path/to/protobuf.jar xxx.java
答案 1 :(得分:2)
你是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
答案 2 :(得分:1)
您可能需要使用protobuf套件的2.4.1版(或至少2.4+版),包括以确保更新protoc(protobuf编译器)和使用新的protoc重新编译你的proto定义。 (换句话说,一切都必须是相同的版本:
我得到了一切,我开始向前推进一个我正在看的Clojure项目。您可能遇到了相同的版本偏斜问题。
答案 3 :(得分:0)
protoc -I = $ SRC_DIR --java_out = $ DST_DIR $ SRC_DIR / addressbook.proto
您可以从>>。
下载protoc.exe(新版本)你正确配置的* .proto文件中的https://code.google.com/p/protobuf/downloads/detail?name=protoc-2.5.0-win32.zip&can=2&q=
option java_package = "com.example.package";
option java_outer_classname = "class name";
答案 4 :(得分:0)
可以使用ubuntu a
安装protobuf jar文件apt-get install libprotobuf-java
这将复制/ usr / share / java /
下的protobuf-java-2.4.1.jar希望这有帮助