Да, на оба вопроса.
Если вы используете sbt-protoc
, в вашем файле SBT может быть следующее определение:
PB.protocOptions in Compile := Seq(
"--descriptor_set_out=" +
(baseDirectory in Compile).value.getParentFile / "src" / "main" / "resources" /"out.desc"
)
Одно предостережение:создать src/main/resources
самостоятельно, иначе вы получите ошибку.Вероятно, было бы лучше сгенерировать в resourceManaged
(что также потребовало бы создания каталога заранее, поскольку protoc
не делает этого)
Вы также можете собрать FileDescriptorSet во время выполнения.Для каждого прото-файла ScalaPB генерирует объект Scala с scalaDescriptor
(а также javaDescriptor
, если это более удобно).Дескрипторы содержат список их зависимостей, которые также FileDesciptor
s - вы можете пройти по этой древовидной структуре и построить список FileDescriptor
s, который по сути является FileDescriptorSet
.