잡동사니

반응형

질문

offline 디렉토리의 첫 번째 proto 파일 (main.proto)

option java_package = "com.xxx.proto";
option java_outer_classname = "Service1";
option java_multiple_files = true;

message Response {
    repeated Entity entity = 1;
}

message Entity {}

여기에 최근 두 번째 proto 파일 (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"는 이미 "recent / recent.proto"파일에 정의되어 있습니다. 두 경우 모두 엔티티가 다르지만 class 이름이 동일하다는 것을 언급하고 싶습니다.


답변1

protobuf 패키지가 동일하다고 가정하면 (현재의 경우) 메시지는 동일한 protobuf 이름을 갖습니다. 그래서 그것은 확실히 문제입니다.

maven 플러그인은 각 파일을 protoc에 대한 별도의 호출로 빌드했을 수 있습니다. gradle 플러그인은 protoc의 단일 호출을 사용하므로 장점이 있으며 변경 될 것으로 예상되지 않습니다 (하지만 다른 사람들은 다르게 느낄 수 있음).

두 개의 개별 프로젝트를 생성했다면 아마도 괜찮을 것입니다. 그렇지 않으면 protobuf가 메시지를 참조 할 수 있어야합니다. 그것은 이름으로 이루어집니다. 이름은 잠재적으로 중첩 된 proto 패키지 메시지 이름입니다.

원하는 작업을 수행하는 적절한 방법은 중첩 된 메시지를 사용하거나 단순히 다른 이름을 사용하는 것입니다.

message Request {
  message Foo {}
}


 

 

 

 

출처 : https://stackoverflow.com/questions/62911250/why-i-am-getting-proto-class-is-is-already-defined-in-file

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band