java - 如何将 protobuf 文件从一个文件夹导入 Eclipse 中的另一个文件夹?

标签 java eclipse protocol-buffers

我有一个现有的 eclipse 项目,包括 google protocol buffers。我正在尝试在新文件夹中添加一个新的 .proto,然后将其从 .proto 包含在原始文件夹中。

当我尝试构建它时,我得到:

..\shared\PanicShared.proto: Backslashes, consecutive slashes, ".", or ".." are not allowed in the virtual path

如何在 Eclipse 的不同文件夹中引用另一个 .proto?如果我使用绝对文件路径,则该项目将不可移植。

如果我只是在没有路径的情况下导入“PanicShared.proto”,那么导入行本身不会出错,但是在 PanicShared.proto 中我有:

enum PanicLevel {
    NORMAL = 0;
    etc.
}

当我尝试在另一条消息中使用它时:

import "PanicShared.proto";

message PanicPremium {
  repeated PanicLevel panicPremiumLevels = 11;
}

我得到一个错误:

[protoc] PanicPremium.proto:9:12: "PanicLevel" is not defined.

[protoc] [libprotobuf WARNING google/protobuf/descriptor.cc:5411] Warning: >Unused import: "PanicPremium.proto" imports "PanicShared.proto" which is not used.

最佳答案

我通常通过相对包含来解决这个问题。

如果这是我的结构:

  project
   +- dir1
      +- file1.proto
   +- dir2
      +- file2.proto

我希望 file1.proto 包含 file2.proto 我这样做:

protoc -I ../dir2 <other args you need> file1.proto

在 file1 中它会说:

import "file2.proto";

这是在我的机器上完成的示例:

$ find `pwd` -type f
/tmp/so/shared/PanicShared.proto
/tmp/so/main/Main.proto

$ cat /tmp/so/shared/PanicShared.proto
enum PanicLevel {
    NORMAL = 0;
}
$ cat /tmp/so/main/Main.proto
import "PanicShared.proto";

message PanicPremium {
  repeated PanicLevel panicPremiumLevels = 11;
}

$ cd /tmp/so/shared

$ protoc -I . PanicShared.proto --cpp_out=.

$ g++ PanicShared.pb.cc -c -o PanicShared.pb.o

$ cd /tmp/so/main

$ protoc -I . -I ../shared Main.proto --cpp_out=.

$ g++ Main.pb.cc -c -o Main.pb.o -I ../shared

$ protoc --version
libprotoc 2.5.0

$ cd /tmp/so/

$ find `pwd` -type f
/tmp/so/shared/PanicShared.pb.cc
/tmp/so/shared/PanicShared.proto
/tmp/so/shared/PanicShared.pb.h
/tmp/so/shared/PanicShared.pb.o
/tmp/so/main/Main.pb.o
/tmp/so/main/Main.pb.h
/tmp/so/main/Main.proto
/tmp/so/main/Main.pb.cc

关于java - 如何将 protobuf 文件从一个文件夹导入 Eclipse 中的另一个文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34658367/

相关文章:

Java:URLConnection 的合理超时时间

java - 合理 `instanceof` ?将其与接口(interface)一起使用,但不与实现类型一起使用

java - 带$符号的sql表名

java - 获取可用于读取/写入 HDFS 的 Hadoop FileSystem 对象的正确方法是什么?

eclipse - Json 编辑器插件安装?

java - 打印 ASM 代码以生成给定的类用法 : ASMifier [-debug] <fully qualified class name or class file name>

Linux rpc : Varint for protobuf encoding : not expected value

scala - 解码的Snappy压缩字节数组的结尾为零

sql - Notepad++/Eclipse sql代码自动缩进选项?

反序列化 protobuf 消息时出现 java.lang.NoClassDefFoundError