2017-05-31 5 views
1

ScalaPBにインターネットからの.protoの依存関係を取得する方法を教えてください。サードパーティの.protoファイルをScalaPBに持ち込む

google/api/annotations.proto

https://github.com/googleapis/googleapis/tree/master/google/apiから背景:

目的はgRPCを経由して、スカラ座からetcd v3のAPIを読むことです。

自分のプロジェクトからetc12のファイル.protoを選んで採掘しました。できます。しかし、依存関係は深く動き始め、より良い方法が必要です。 ScalaPBメーリングリストの

https://github.com/googleapis/googleapis/tree/master/google/api

答えて

3

ScalaPBはサードパーティの依存関係のダウンロードを処理しませんが、SBTをダウンロードしてScalaPBにダウンロードされたprotosをビルドすることは非常に簡単です。

次のサンプルbuild.sbtは、githubからzipファイルにリンクされたrepoのマスターブランチをダウンロードして抽出するタスクを定義します()。何かをする前に、コンパイルするたびにzipを何度もダウンロードしないように、ターゲットディレクトリが存在しないかどうかをチェックします。

そこには多数のprotoがあるので、zipファイルをフィルタリングします。ソースルートはtarget/scala-2.12/resource_managed/googleapis-masterに展開され、​​に追加されます。protocが呼び出されると、ソースルートはこれらのファイルを処理します。

src/main/protobufにさらにソースを追加して、"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" 
+0

私は2つの.protoファイル(api/annotations.proto、api/http.proto)が必要です。 bigtable/admin/v2/*を残すことは安全ですか? – akauppi

+1

はい、必要なものだけを残して、それは単なる例でした。 – thesamet

-1

postオンラインからの依存関係を取得することは不可能であることを伝えます。自分のプロジェクトにコピーを置くことは正しい方法です。

関連する問題