第一个原型文件(main.proto)位于offline
目录
option java_package = "com.xxx.proto";
option java_outer_classname = "Service1";
option java_multiple_files = true;
message Response {
repeated Entity entity = 1;
}
message Entity {}
这里我有第二个原型文件(recent.proto),这是最近的
option java_package = "com.xxx.proto";
option java_outer_classname = "Service2";
option java_multiple_files = true;
message Response {
repeated Entity entity = 1;
repeated Entity.Type type =2;
}
message Entity {}
我收到protoc: stdout: . stderr: offline/main.proto: "offline.Response.entitiy" is already defined in file "recent/recent.proto".
想要提及的是,这两种情况下的实体是不同的,类名是相同的
假设 protobuf 包相同(在当前情况下是相同的),那么消息具有相同的 protobuf 名称。所以这绝对是一个问题。
maven 插件可能已将每个文件构建为对 protoc 的单独调用,而这是不会注意到的。 gradle 插件使用 protoc 的单次调用,这有其优点,并且不是我希望更改的内容(但其他人可能有不同的感觉)。
如果您生成的是两个独立的项目,那么可能就没问题。否则,protobuf 需要能够引用消息。这是按名字完成的。名称是原始包+消息名称,可能有嵌套。
执行您想要的操作的适当方法是使用嵌套消息(或简单地使用不同的名称):
message Request {
message Foo {}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)