我有一个 myTask
任务,它调用其他任务,如下所示:
def myTask = Task <<= (Task1, Task2, Task3) map {(_,_,_)=>;}
Task1、Task2、Task3
采用作为目录的 tcWebApp
配置变量。
tcWebApp := file("../tomcat")
一切正常。
我现在需要的是创建另一个类似于 myTask
的任务 myTask2
,但我想使用为该任务设置的另一个目录来调用此任务tcWebApp
设置,即该设置应该具有任务的另一个值。可能吗?
我尝试过类似的方法
tcWebApp in myTask2 := file("newDir")
但是没有成功。请指教。
最佳答案
当你写下:
`tcWebApp in myTask2` := ...
这并不意味着“当 myTask2 正在执行时,tcWebApp 具有以下值”,正如您所希望的那样。它的意思是,“如果有人询问 myTask2 对 tcWebApp 有什么值(value),它会回复如下。”它对 tcWebApp 的全局值没有任何影响;如果没有人询问 myTask2
它的 tcWebApp
值是多少,那么在该任务中设置它根本没有任何效果。因此 Task1
将继续使用 tcWebApp
的全局值。
我在 Stack Overflow 上发现了一些相关问题:
这里 Daniel Sobral 写道“根据我从你的问题中了解到的,你希望依赖项的设置有所不同,具体取决于依赖它的内容。这是没有意义的——依赖项要么满足,要么不满足不,依赖于它的东西并不在考虑范围之内。”据我了解,这就是您问题的答案。
为了解决此问题,不要尝试将 Task1
和 Task2
重用为任务,而是重用它们内部的代码。让 Task1
和 Task2
调用您定义的普通方法,然后让 myTask2
调用这些相同的方法,并向它们传递不同的参数。换句话说,不要尝试通过设置来解决问题;通过普通Scala代码即可解决。
或者,这是您可以采取的另一种方法。如果您将 myTask2 设为命令而不是任务,则可以执行您想要的操作。请参阅 http://www.scala-sbt.org/release/docs/Extending/Commands.html,其中显示“命令可以查看或修改其他 sbt 设置”。
关于scala - 如何定义新设置并为任务设置其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20397502/