ScalaPB kann keine Abhängigkeiten von Drittanbietern herunterladen, aber es ist ziemlich einfach, SBT diese für Sie herunterzuladen und ScalaPB mitzuteilen, dass die heruntergeladenen Protos erstellt werden sollen.
Das folgende Beispiel build.sbt
definiert eine extractProtos
Task, die den Masterzweig des Repos herunterlädt, mit dem Sie als Zip-Datei verknüpft sind, aus Github und extrahiert es. Bevor Sie etwas tun, überprüft es, ob das Zielverzeichnis nicht existiert, um zu verhindern, dass die ZIP-Datei bei jedem Kompilieren immer wieder heruntergeladen wird.
Da es viele Protos gibt, filtern wir die Zip-Datei. Der Quellstamm wird in target/scala-2.12/resource_managed/googleapis-master
extrahiert, den wir zu PB.protocSources in Compile
hinzufügen. Wenn Protoc aufgerufen wird, verarbeitet es diese Dateien.
Sie können weitere Quellen in src/main/protobuf
hinzufügen und haben sie "import "google/rpc/..."
.
scalaVersion := "2.12.2"
libraryDependencies ++= Seq(
"io.grpc" % "grpc-netty" % com.trueaccord.scalapb.compiler.Version.grpcJavaVersion,
"com.trueaccord.scalapb" %% "scalapb-runtime-grpc" % com.trueaccord.scalapb.compiler.Version.scalapbVersion
)
PB.targets in Compile := Seq(
scalapb.gen() -> (sourceManaged in Compile).value
)
PB.generate in Compile := (PB.generate in Compile).dependsOn(extractProtos).value
PB.protoSources in Compile += resourceManaged.value/"googleapis-master"
lazy val extractProtos = Def.task {
if (!(resourceManaged.value/"googleapis-master").exists) {
val zipUrl = "https://github.com/googleapis/googleapis/archive/master.zip"
println(s"Unzipping $zipUrl.")
IO.unzipURL(
from=url(zipUrl),
filter=(
"googleapis-master/google/bigtable/admin/v2/*" |
"googleapis-master/google/api/*" |
"googleapis-master/google/logging/*" |
"googleapis-master/google/longrunning/*" |
"googleapis-master/google/rpc/*" |
"googleapis-master/google/type/*"
),
toDirectory=resourceManaged.value)
}
}
libraryDependencies += "com.trueaccord.scalapb" %% "scalapb-runtime" %
com.trueaccord.scalapb.compiler.Version.scalapbVersion % "protobuf"
Große Antwort! Ich brauche nur zwei .proto Dateien (api/annotations.proto, api/http.proto). Ist es sicher, den BigTable/admin/v2/* zu verlassen? – akauppi
Ja, lass nur was du brauchst, es war nur ein Beispiel. – thesamet