我正在使用SBT 0.13.2,我希望通过执行编译任务的方式触发我的任务.我知道我可以通过使用该triggeredBy方法实现这一点,如taskDefinition.triggeredBy(compile in Compile).
我有一个build.sbt与我的定义自定义任务.
问题是我无法理解为什么以下按预期工作
val triggeredTask = taskKey[Unit]("Triggered by compile")
triggeredTask <<= Def.task {
println("TRIGGERED BY COMPILE")
}.triggeredBy(compile in Compile)
Run Code Online (Sandbox Code Playgroud)
但是下一个不起作用(compile执行得很好,但我的任务没有被触发)
val triggeredTask = taskKey[Unit]("Triggered by compile")
triggeredTask := Def.task {
println("TRIGGERED BY COMPILE")
}.triggeredBy(compile in Compile).value
Run Code Online (Sandbox Code Playgroud)
我的理解是,SBT 0.13 <<=已经过时,:=应该足够了.
我可能会误解你想要做什么。
如果我让你的例子更详细,它就会变成这样:
val triggeredTaskKey = taskKey[Unit]("Triggered by compile")
val anonymousTask = Def.task {
println("TRIGGERED BY COMPILE")
}.triggeredBy(compile in Compile)
// I imagine the macro doing something like this
triggeredTaskKey <<= anonymousTask map (identity)
Run Code Online (Sandbox Code Playgroud)
这也不会触发 上的匿名任务compile。
请注意,这是提取位置信息<<=的荣耀版本。setAndset只是一个别名,Def.setting(key, value, position)反过来会为其创建一个新Setting实例。请注意,内部创建的设置实例具有这 3 个参数的构造函数。
我认为 sbt 中没有办法在没有密钥的情况下声明设置(我在这里可能是错的)。然而,您似乎想创建一个没有密钥的设置(即触发的)。
这可能是由错误引起的,我不确定 sbt 是否应该递归地遍历依赖项以查找triggeredBy在其info. 但目前还不是(如trigger方法中所示) 。
理论上,您可以做出解决方案,使用绑定到某个任意键的正确触发器来创建设置。我不确定那会如何运作。
| 归档时间: |
|
| 查看次数: |
863 次 |
| 最近记录: |