【问题标题】:Uploading generated resources to S3 in stage task?在阶段任务中将生成的资源上传到 S3?
【发布时间】:2014-05-21 17:21:44
【问题描述】:

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

resourceGenerators in Compile <+= genWro in Compile

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

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

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

【问题讨论】:

  • 我的理解是 stage 使用 resourceGenerators in Compile 并且您要求的是设计。我可能遗漏了什么。
  • 谢谢雅克。我对resourceGenerators 的触发方式很好。我主要关心的是如何将任务中的 Seq[File] 结果转换为将这些文件上传到 S3 的自定义任务,并且只有在调用 stage 时才调用该自定义任务。

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


【解决方案1】:

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

您已获得来自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
}

【讨论】:

  • (resourceGenerators in Compile).value 并没有真正让我得到已生成文件的列表。我不得不在目录上使用 IO.listFiles - 这没什么大不了的,只是不是我所期望的。
猜你喜欢
  • 2021-11-11
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 2019-03-04
相关资源
最近更新 更多