首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SBT任务中手动调用ScalaPB编译器

在SBT任务中手动调用ScalaPB编译器
EN

Stack Overflow用户
提问于 2016-04-25 03:11:44
回答 1查看 648关注 0票数 4

我正在使用ScalaPB来合成Scala类,以便在Protobuf表示之间来回转换我的数据。默认情况下,the SBT setup挂接到sbt compile以在target文件夹下生成文件。

因为我希望我的.proto文件很少更改,所以我宁愿在更改时手动调用ScalaPB流程,并将生成的文件保持在版本控制之下。这与我对Slick's code generation functionality使用的方法相同。

我可以这样做:

代码语言:javascript
复制
lazy val genProto = TaskKey[Unit]("gen-proto", "Generate Scala classes from a proto file")
genProto := {
  val protoSources = ...
  val outputDirectory = ...

  // ? run the same process 
}

但我不确定如何使用自定义输入和输出从SBT调用流程。

我的最新尝试:

代码语言:javascript
复制
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
}

我得到以下错误:

代码语言:javascript
复制
> 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
EN

回答 1

Stack Overflow用户

发布于 2016-04-25 13:36:41

代码语言:javascript
复制
import sbt._
import Keys._

lazy val genProto = TaskKey[Unit]("gen-proto", "Generate Scala classes from a proto file")

genProto := {
    Seq("/path/to/scalapbc-0.5.24/bin/scalapbc",
        "src/main/protobuf/test.proto",
        "--scala_out=src/main/scala/") !
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36827692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档