如何设置始终执行的任务?

时间:2015-02-05 10:40:37

标签: sbt

我在插件中有一个任务,我希望它总是在项目中运行使用它 - 它根据我们的自定义规则验证一些依赖版本。

我不介意什么时候运行,只要它一直运行。这是一项任务,因为我想将输出记录到控制台,我知道如何做到这一点的唯一方法是使用streams.value.log.xxx,并且只能从任务中调用。

  • 我尝试了一项取决于(compile in Compile)的任务,但如果用户执行sbt test
  • 则无法运行
  • 我尝试直接使用runTask()运行任务,但这需要一个主类
  • 我尝试onLoad,但需要State => State,我无法从中调用记录器
  • 我无法确定如何依赖update命令,但如果用户从不调用更新命令,那么它似乎无法正常工作。

我如何满足我的要求?

1 个答案:

答案 0 :(得分:0)

我没有花太多时间考虑这个想法,但认为使用类型为shellPrompt的{​​{1}}可能会有所帮助。由于它只是AttributeKey[State => String],它可能无法执行任务或命令,但一旦你重构任务,你可能会得到一些正常工作。

AttributeKey

每当> help shellPrompt The function that constructs the command prompt from the current build state. 命令构建提示时,提供可以运行命令的交互式提示。(请参阅shellhelp shell被查询建立提示。

我执行了一项非常简陋的测试,它给了我你想要的结果。

<强> build.sbt

shellPrompt

project / build.scala (只是相关部分的副本)

shellPrompt <<= ShellPrompt.buildShellPrompt

每当生成提示时执行val buildShellPrompt = Def.setting { (state: State) => { val extracted = Project extract state import extracted._ val currProject = currentProject.id println("Hello world - how are you doing today?") "%s:%s:%s> ".format( currProject, currBranch, (version in ThisBuild).value) } } 行,这意味着在每一行执行时,无论是任务,命令还是字面上的所有内容。

有关自定义println的完整示例,请参阅sbt-reference-project