【发布时间】:2011-11-25 07:10:14
【问题描述】:
我有一个文件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 所在的当前路径有 com/google/protobuf/ *.class of protobuf 库。
我再次发出 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 类给出了同样的错误。
有什么想法吗??
回答
好的。谢谢大家。
主要问题是谷歌的protocol buffers编译器包默认不创建java库。我认为它确实并安装了它。如果您正在运行 Maven,它实际上会这样做。但是我没有maven
所以我在/java/src 中编译了代码并使用了jar。
^
【问题讨论】:
-
对了,你需要自己编译protobuf中的java子目录(一般使用Maven,因为有pom.xml文件),编译生成的java源码时使用生成的jar文件。或者您可以只下载 jar 文件,例如从 Maven 存储库(mvnrepository.com/artifact/com.google.protobuf/protobuf-java,单击 Binary)。
标签: java scala protocol-buffers