1

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

resourceGenerators in Compile <+= genWro in Compile

负责在打包期间创建资源。

然后,我想在sbt-native-packager的任务期间Seq[java.util.File]获取resourceGenerators返回的结果并将它们上传到 S3 。stage

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

4

1 回答 1

1

鉴于您所说的评论“我主要关心的是如何将任务中的 Seq[File] 结果转换为将这些文件上传到 S3 的自定义任务,并且只有在调用阶段时才调用该自定义任务。” ,答案可能如下。

您已经stage完成了来自sbt-native-packager插件的任务。

> 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
}
于 2014-04-09T14:56:17.913 回答