在java和scala中使用protobufs时出现的问题
我有一个文件在java和scala中使用protobufs时出现的问题,java,scala,protocol-buffers,Java,Scala,Protocol Buffers,我有一个文件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 re
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的protocol buffers编译器包默认情况下不会创建java库。我假设它会这样做并安装它。如果您运行的是Maven,它实际上是这样的。但是我没有maven
因此,我在/java/src
中编译了代码,并使用了jar。
^编译时,类路径上需要有protobuf lib。所有缺少的包和类都来自protobuf库 找到protobuf jar并使用
javac -cp path/to/protobuf.jar xxx.java
您可能需要使用protobuf工具包的版本2.4.1(或至少2.4+),包括确保更新protoc(protobuf编译器)并使用新的protoc重新编译proto定义。(换句话说,所有内容都必须是相同的版本:
- protobuf-vn.n.n.jar文件
- protoc编译器;以及
- 使用protoc编译.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/
希望这有帮助。我把protobuf jar放在同一个目录中,它显示了上面“找不到符号”的第二组错误……第一组错误已经消失了。对,您需要自己在protobuf中编译java子目录(通常使用Maven,因为有pom.xml文件),并在编译生成的java源代码时使用生成的jar文件。或者,您可以只下载jar文件,例如从Maven repository(,单击Binary)。要下载该版本,