在java协议缓冲区中导入“google / protobuf / descriptor.proto”
我有一个.proto
文件定义,需要导入"google/protobuf/descriptor.proto"
因为我使用自定义选项 。
所以在我的.proto
文件中我做了:
import "google/protobuf/descriptor.proto"; package ...; ...
由于我的文件没有编译抱怨依赖,我得到了descriptor.proto文件的副本,将它放在我的proto文件所在的目录中。
这解决了问题,但我不相信这是正确的方法。 现在, descriptor.proto
与我的.proto
文件一起编译,导致在运行时有2个编译的descriptor.proto
:
- 与
protobuf-java-2.5.0.jar
文件一起提供的protobuf-java-2.5.0.jar
- 与我的
.proto
文件一起编译的.proto
我认为应该以某种方式使用--proto-path
选项,但不完全确定什么是正确的方法。
感谢您的最佳实践提示!
当我在.proto中使用了描述符时,我就像使用它一样
import "google/protobuf/descriptor.proto"; message AddressBook { required google.protobuf.FileDescriptorSet proto_files = 1;
然后在默认目录中使用addressbookSD.proto生成java(在Windows上):
protoc addressbookSD.proto --java_out=./ --proto_path=./ --proto_path=\src
其中< protobuf-install-directory >是协议缓冲区安装目录。 关键点是descriptor.proto在
\src\google\protobuf
protobuf导入阶段中的级别必须与文件系统中的目录匹配,就像在java中一样。
所以我使用< protobuf-install-directory> \ src作为导入目录,目录结构必须是
\src +-- google +-- protobuf +-- descriptor.proto