3
ScalaPBを使用して、データをProtobuf表現に変換するためのScalaクラスを合成しています。既定ではthe SBT setupはsbt compile
にフックしてtarget
フォルダの下にファイルを生成します。SBTタスクでScalaPBコンパイラを手動で呼び出す
私の.proto
ファイルが非常に頻繁に変更されることはないので、手動でScalaPBプロセスを起動し、生成されたファイルをバージョン管理下に保管します。これは私がSlick's code generation functionalityに使用しているのと同じアプローチです。
私のような何かを行うことができます:
lazy val genProto = TaskKey[Unit]("gen-proto", "Generate Scala classes from a proto file")
genProto := {
val protoSources = ...
val outputDirectory = ...
// ? run the same process
}
しかし、私は、カスタムの入力と出力とのSBTからプロセスを起動するかどうかはわかりません。
私の最新の試み:
ScalaPbPlugin.runProtoc in ScalaPbPlugin.protobufConfig := (args =>
com.github.os72.protocjar.Protoc.runProtoc("-v261" +: args.toArray))
lazy val genProto = TaskKey[Unit]("gen-proto", "Generate Scala classes from a proto file")
genProto := {
val protoSourceDirectory = sourceDirectory.value/"main"/"protobuf"
val outputDirectory = (scalaSource in Compile).value/outputProtoDirectory
val schemas = (protoSourceDirectory ** "*.proto").get.map(_.getAbsoluteFile)
val includeOption = Seq(s"-I$protoSourceDirectory")
val outputOption = Seq(s"--scala_out=${outputDirectory.absolutePath}")
val options = schemas.map(_.absolutePath) ++ includeOption ++ outputOption
(ScalaPbPlugin.runProtoc in ScalaPbPlugin.protobufConfig).value(options)
(outputDirectory ** "*.scala").get.toSet
}
私は次のエラーを取得する:
> genProto
protoc-jar: protoc version: 261, detected platform: mac os x/x86_64
protoc-jar: executing: [/var/folders/lj/_85rbyf5525d3ktt666yjztr0000gn/T/protoc2879794465962204787.exe, /Users/alan/projects/causality/src/main/protobuf/lotEventStoreModel.proto, -I/Users/alan/projects/causality/src/main/protobuf, --scala_out=/Users/alan/projects/causality/src/main/scala/net/artsy/auction/protobuf]
protoc-gen-scala: program not found or is not executable
--scala_out: protoc-gen-scala: Plugin failed with status code 1.
[success] Total time: 0 s, completed Apr 25, 2016 9:39:09 AM
私は私の問題は、私はscalapbc' 'へのパスが – acjay
が何であるかを知らないということだと思いますつまり、SBTによってインストールされた実行可能ファイルです。可能であれば、ワークフローをすべてSBT内に保ちたいので、依存関係を手動でインストールする必要はありません。 – acjay