Команда protoc не генерирует все базовые классы (Java) - PullRequest
0 голосов
/ 30 декабря 2018

Я пытался сгенерировать базовые клиентские и серверные интерфейсы gRPC из .proto определения сервиса здесь из официального репозитория grpc.Соответствующая служба, определенная в этом файле (по ссылке выше), находится ниже:

service RouteGuide {
    rpc GetFeature(Point) returns (Feature) {}
    rpc ListFeatures(Rectangle) returns (stream Feature) {}
    rpc RecordRoute(stream Point) returns (RouteSummary) {}
    rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
}

Я запускаю команду: protoc --java_out=${OUTPUT_DIR} path/to/proto/file

Согласно сайту grpc (в частности, здесь), RouteGuideGrpc.java, который содержит базовый класс RouteGuideGrpc.RouteGuideImplBase, со всеми методами, определенными в службе RouteGuide, предполагается, что было сгенерировано из команды protoc выше, но этот файлне генерируется для меня.

Кто-нибудь сталкивался с подобными проблемами?Официальная документация просто неверна?И есть ли у кого-нибудь предложение относительно того, что я могу сделать, чтобы создать этот пропавший класс?

1 Ответ

0 голосов
/ 31 декабря 2018

Это может помочь кому-то еще в будущем, поэтому я отвечу на свой вопрос.

Я считаю, что документация java для генерации кода gRPC не полностью обновлена, и информация разбросана по различным официальным репозиториям..

Получается, что для генерации всех базовых классов Java-сервисов gRPC, как и ожидалось, вам нужно указать дополнительный флаг для protoc cli, например, grpc-java_out=${OUTPUT_DIR}.Но чтобы этот дополнительный флаг работал, вам нужно иметь несколько дополнительных вещей:

  1. Двоичный файл для плагина protoc для gRPC Java protoc-gen-grpc-java: вы можете получить соответствующий для вашей системыот maven central здесь (ссылка для v1.17.1).Если для вашей системы нет готового бинарного файла, вы можете скомпилировать его самостоятельно, следуя инструкциям репозитория github здесь .
  2. Убедитесь, что бинарный каталог добавлен в вашу PATHпеременная окружения, и двоичный файл переименовывается точно в «protoc-gen-grpc-java» (это имя, которое protoc cli ожидает иметь в пути).

  3. Наконец, вы готовы выполнить правильную команду protoc --java_out=${OUTPUT_DIR} --grpc-java_out=${OUTPUT_DIR} path/to/proto/file, и теперь базовые классы обслуживания, такие как RouteGuideGrpc.RouteGuideImplBase, должны быть сгенерированы, когда раньше их не было.

Я надеюсь, что это объяснение поможет кому-то еще в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...