Как скомпилировать прото файлы google-fhir

Глядя на readme для google-fhir, он говорит, что нужно запустить bazel build, который работает, однако ни один из файлов протокола не был скомпилирован.

Бег protoc --proto_path=. --java_out=. proto/stu3/resources.proto возвращает кучу ошибок о том, что другие протосы не найдены. Это продолжается в обратном направлении до "descriptor.proto", который не является прото в папке. Ни один из файлов протокола в этом каталоге не будет скомпилирован вручную в файлы Java.

* С другой стороны, я смог взять другие примеры прототипов из других источников и успешно скомпилировать их.

ОБНОВИТЬ

Выполнение команды protoc --proto_path=proto/stu3/ --java_out=target proto/stu3/resources.proto из базового каталога google-fhir возвращает следующий вывод:

~/fhir-master$ protoc --proto_path=proto/stu3/ --java_out=target proto/stu3/resources.proto
proto/stu3/annotations.proto: File not found.
proto/stu3/codes.proto: File not found.
proto/stu3/datatypes.proto: File not found.
resources.proto: Import "proto/stu3/annotations.proto" was not found or had errors.
resources.proto: Import "proto/stu3/codes.proto" was not found or had errors.
resources.proto: Import "proto/stu3/datatypes.proto" was not found or had errors.
resources.proto:84:5: "String" is not defined.
resources.proto:87:14: "Extension" is not defined.
resources.proto:90:14: "Extension" is not defined.
resources.proto:94:5: "Reference" is not defined.
resources.proto:97:5: "PositiveInt" is not defined.
...
...


Эти файлы определенно находятся в одном и том же каталоге прототипов.

ОБНОВЛЕНИЕ 2

Ну, это определенно не работает прямо из коробки. Перемещая файлы, я смог создать целевую папку с кучей файлов Java. Однако, пытаясь скомпилировать их, я получаю ошибки для файлов, которые не существуют:

  symbol:   class CodeableConcept
  location: package com.google.fhir.stu3.proto
./PlanDefinition.java:30950: error: cannot find symbol
  public com.google.fhir.stu3.proto.CodeableConceptOrBuilder getJurisdictionOrBuilder(
                               ^
  symbol:   class CodeableConceptOrBuilder
  location: package com.google.fhir.stu3.proto
./PlanDefinition.java:30956: error: cannot find symbol
  private java.util.List<com.google.fhir.stu3.proto.CodeableConcept> topic_;
                                               ^
  symbol:   class CodeableConcept
  location: package com.google.fhir.stu3.proto
./PlanDefinition.java:30964: error: cannot find symbol
  public java.util.List<com.google.fhir.stu3.proto.CodeableConcept> getTopicList() {
                                              ^
  symbol:   class CodeableConcept
  location: package com.google.fhir.stu3.proto
./PlanDefinition.java:30974: error: cannot find symbol
  public java.util.List<? extends com.google.fhir.stu3.proto.CodeableConceptOrBuilder> 

  ....                                                         ^
  100 errors.

! Кроме того, я не вижу этих файлов здесь: https://github.com/google/protobuf/tree/master/java/core/src/main/java/com/google/protobuf

1 ответ

Решение

Похоже, что ваша команда для компиляции не очень хорошо отформатирована: --proto_path= Это путь к вашему прото. --java_out= Это папка, в которой будет скомпилирован ваш класс.

Ваш аргумент такой: proto/stu3/resources.proto, поэтому я сделал вывод, что ваши файлы находятся в proto/stu3.

Не могли бы вы попробовать эту команду и сообщить нам, сработала ли она для вас:

protoc --proto_path=proto/stu3/ --java_out=target proto/stu3/resources.proto

Если ваш прототип дескриптора завершен, у вас не должно быть ошибок компиляции, а ваш результат должен находиться в папке "target".

РЕДАКТИРОВАТЬ: глядя на ваше последнее редактирование, я бы сказал, что вы должны переместить resources.proto в ваш базовый каталог и выполнить следующую команду:protoc --proto_path=. --java_out=target resources.proto

Поскольку путь к вашему импорту закодирован в вашем импорте. Это немного трудно помочь, так как у нас нет доступа ко всему вашему протодескриптору. Если вы взяли его из онлайн-репо, было бы полезно, если бы вы могли поделиться им.

Я заставил его работать, не указав реальный путь к --proto_path= вообще.

Как я это сделал

  • Моя структура папок выглядит так: D:\dev\OpenSourceProjects\ это моя основная папка.
  • В этой папке у меня есть google-fhirэто мой клон репозитория github иprotoc-3.11.3-win64который является распаковкой протокольных двоичных файлов
  • Так, например, чтобы построить resources.proto запустите следующее в cmd:

cd D:\dev\OpenSourceProjects\google-fhir

D:\dev\OpenSourceProjects\protoc-3.11.3-win64\bin\protoc.exe --proto_path= --java_out=./proto/output .\proto\stu3\resources.proto

  • Обратите внимание, что --proto_path= есть, но пусто и все остальные пути относительны
Другие вопросы по тегам