我在插件中有一个任务,我希望它总是在项目中运行使用它 - 它根据我们的自定义规则验证一些依赖版本。
我不介意什么时候运行,只要它一直运行。这是一项任务,因为我想将输出记录到控制台,我知道如何做到这一点的唯一方法是使用streams.value.log.xxx,并且只能从任务中调用。
(compile in Compile)
的任务,但如果用户执行sbt test
runTask()
运行任务,但这需要一个主类State => State
,我无法从中调用记录器update
命令,但如果用户从不调用更新命令,那么它似乎无法正常工作。我如何满足我的要求?
答案 0 :(得分:0)
我没有花太多时间考虑这个想法,但认为使用类型为shellPrompt
的{{1}}可能会有所帮助。由于它只是AttributeKey[State => String]
,它可能无法执行任务或命令,但一旦你重构任务,你可能会得到一些正常工作。
AttributeKey
每当> help shellPrompt
The function that constructs the command prompt from the current build state.
命令构建提示时,提供可以运行命令的交互式提示。(请参阅shell
)help 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。