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

Adi*_*ngh 3 java scala protocol-buffers

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

protoc --java_out=./ xxx.proto
Run Code Online (Sandbox Code Playgroud)

它生成了我的xxx.java

现在我想将这个文件编译成一个可以与Scala一起使用的类文件.

javac xxx.java
Run Code Online (Sandbox Code Playgroud)

这给了我这个错误

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
Run Code Online (Sandbox Code Playgroud)

现在我猜,它没有包.

因此,我将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
Run Code Online (Sandbox Code Playgroud)

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

任何想法该怎么办?

回答

好的.感谢大家.

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

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

Pet*_*aný 6

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

找到protobuf jar并使用

javac -cp path/to/protobuf.jar xxx.java
Run Code Online (Sandbox Code Playgroud)