我有myTask
任务调用其他任务,如下所示:
def myTask = Task <<= (Task1, Task2, Task3) map {(_,_,_)=>;}
Task1, Task2, Task3
获取一个tcWebApp
配置变量作为目录。
tcWebApp := file("../tomcat")
一切正常。
我现在需要创建另一个与myTask2
类似的任务myTask
,但我想使用为tcWebApp
设置设置的另一个目录来调用此任务,即设置应该具有该任务的另一个值。有可能吗?
我尝试过像
这样的东西tcWebApp in myTask2 := file("newDir")
但它不起作用。请指教。
答案 0 :(得分:2)
当你写:
`tcWebApp in myTask2` := ...
这并不意味着“当myTask2正在执行时,tcWebApp具有以下值”,正如您所希望的那样。它的意思是,“如果有人问myTask2它对tcWebApp有什么价值,它将回复如下。”它对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设置”。