在阶段任务中将生成的资源上传到S3?

时间:2014-04-08 19:47:25

标签: scala amazon-s3 sbt sbt-native-packager

我有一个自定义插件,可以在任务genWro中生成一些资源工件。我的插件也设置了:

resourceGenerators in Compile <+= genWro in Compile

负责在打包过程中创建资源。

我想接着Seq[java.util.File] resourceGenerators返回并在 sbt-native-packager stage任务期间将其上传到S3。< / p>

我实际上只想生成这些资源并在stage期间上传,而不是在打包期间上传 - 但一次只能做一件事。基本上,我只想在我的生成版本中生成并上传文件,调用sbt clean stage并在本地开发期间跳过它,我只需要调用sbt run

1 个答案:

答案 0 :(得分:1)

鉴于您所说的&#34;我主要关注的是如何将任务中的Seq [File]结果转换为将这些文件上传到S3的自定义任务,并调用该自定义任务只有在调用stage时才会调用。&#34; ,答案可能如下。

您已获得来自sbt-native-packager插件的stage任务。

> help stage
Create a local directory with all the files laid out as they would be in the final distribution.

您还有另一项任务,例如s3deploy,将resourceGenerators转移到S3。

lazy val s3deploy = taskKey[Unit]("Deploys files to S3")

s3deploy := {
  println(s"Files to transfer: ${(resourceGenerators in Compile).value}")
}

这里有一个解决方案 - 将s3deploy连接到stage

(stage in Universal) := {
    val _ = s3deploy.value
    (stage in Universal).value
}

整个build.sbt如下:

import com.typesafe.sbt.packager.Keys._

packageArchetype.java_application

lazy val s3deploy = taskKey[Unit]("Deploys files to S3")

s3deploy := {
  println(s"Files to transfer: ${(resourceGenerators in Compile).value}")
}

(stage in Universal) := {
    val _ = s3deploy.value
    (stage in Universal).value
}