Protobuf:对不同的包使用相同的消息名称

Protobuf: to use same Message name with different packages

我正在使用 protobuf java,以下是 .proto

// service1.proto
option java_package = "package";
option java_outer_classname = "Proto1";
message M {
   ... // some definition
}

// service2.proto
option java_package = "package";
option java_outer_classname = "Proto2";
message M {
   ... // some different definition
}

编译时,在 service2.proto 中抛出错误,表示 "M" is already defined in service1.proto

但是从包和生成的代码来看,它们应该是 package.Proto1.Mpackage.Proto2.M,这是冲突吗?

“包”也是一个.proto概念(不仅仅是language/framework概念);如果您需要同时涉及两种模式,添加

可能会有用
package Proto1;

到service1.proto和

package Proto2;

到service2.proto


或者,如果 M 在两个地方实际上相同:将 M 移动到不同的单个文件,并使用 service1.proto 和 service2.proto