如何定义新设置并为任务设置其值?

时间:2013-12-05 10:29:07

标签: scala sbt

我有myTask任务调用其他任务,如下所示:

def myTask = Task <<= (Task1, Task2, Task3) map {(_,_,_)=>;}

Task1, Task2, Task3获取一个tcWebApp配置变量作为目录。

 tcWebApp := file("../tomcat")

一切正常。

我现在需要创建另一个与myTask2类似的任务myTask,但我想使用为tcWebApp设置设置的另一个目录来调用此任务,即设置应该具有该任务的另一个值。有可能吗?

我尝试过像

这样的东西
tcWebApp in myTask2 := file("newDir") 

但它不起作用。请指教。

1 个答案:

答案 0 :(得分:2)

当你写:

`tcWebApp in myTask2` := ...

这并不意味着“当myTask2正在执行时,tcWebApp具有以下值”,正如您所希望的那样。它的意思是,“如果有人问myTask2它对tcWebApp有什么价值,它将回复如下。”它对tcWebApp的全球价值没有任何影响;如果没有人询问myTask2 tcWebApp的值是什么,那么在该任务中设置它根本没有任何效果。因此Task1将继续使用tcWebApp的全局值。

我在Stack Overflow上发现了一些相关的问题:

Daniel Sobral写道:“根据我对你的问题的理解,你希望设置根据依赖于它的依赖性而不同。这没有意义 - 依赖性要么满足要么不是不,取决于它的东西不会出现在等式中。“据我了解,这是你问题的答案。

为了解决这个问题,不要尝试重用Task1Task2作为任务,而是重用其中的代码。让Task1Task2调用您定义的普通方法,然后让myTask2调用相同的方法,为它们传递不同的参数。换句话说,不要尝试用设置解决您的问题;通过普通的Scala代码解决它。

或者,这是您可以采取的另一种方法。如果你使myTask2命令而不是任务,你可以做你想做的事。请参阅http://www.scala-sbt.org/release/docs/Extending/Commands.html,其中说“命令可以查看或修改其他sbt设置”。