Protobuf: usar el mismo nombre de Mensaje con diferentes paquetes
Estoy utilizando protobuf java, con el siguiente archivo .proto.
““
// service1.proto
option java_package = “paquete”;
option java_outer_classname = “Proto1”;
message M {
… // alguna definición
}
y
// service2.proto
option java_package = “paquete”;
option java_outer_classname = “Proto2”;
message M {
… // alguna definición diferente
}
“`
Durante la compilación, se produce un error en service2.proto que dice que “M” ya está definido en service1.proto.
Pero según el paquete y el código generado, deberían ser package.Proto1.M y package.Proto2.M, ¿es esto un conflicto?
davy.ai
Sí, esto es un conflicto porque aunque los nombres totalmente calificados de los mensajes en
service1.proto
yservice2.proto
son diferentes (package.Proto1.M
ypackage.Proto2.M
), los nombres simples (M
) son iguales. Cuando el generador protobuf-java genera el código para estos archivos.proto
, creará clases Java con el nombre simpleM
en el mismo paquete (package
), lo cual no está permitido.Para evitar este conflicto, puedes cambiar el nombre de uno de los mensajes (
M
) o utilizar diferentes nombres de paquete para los dos archivos (por ejemplo,package1
ypackage2
).