在Sbt中包含来自外部存储库的资源

时间:2019-05-05 22:15:13

标签: scala sbt

我有一个集中的存储库,其中维护着一组在多个项目中使用的原始文件。我希望能够在ScalaPB将原型编译成相应的案例类之前将其下载到我的资源中。我已经看到了一些使用dependsOn的示例,但是此存储库不是sbt项目。

我将如何处理?

1 个答案:

答案 0 :(得分:1)

考虑将自定义任务定义为download文件到本地资源目录中

lazy val remoteProtoFiles = taskKey[Unit]("Download proto files from remote repository into local resources directory")
remoteProtoFiles := {
  import scala.sys.process._
  streams.value.log.info("Downloading proto files from remote repository into local resources directory...")
  val externalResources = "https://my-external-repo/protofiles/"
  val protoFiles = List("foo.proto", "bar.proto")
  val resources = (Compile / resourceDirectory).value
  protoFiles.foreach { protoFile =>
    url(s"$externalResources/$protoFile") #> (resources / protoFile) !
  }
}

,然后像这样执行compile任务depend on remoteProtoFiles任务

compile in Compile := (compile in Compile).dependsOn(remoteProtoFiles).value

现在执行sbt compile应该在编译执行之前将原型文件下载到yourProject/src/main/resources中。