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

标签 scala sbt

我有一个 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 写道“根据我从你的问题中了解到的,你希望依赖项的设置有所不同,具体取决于依赖它的内容。这是没有意义的——依赖项要么满足,要么不满足不,依赖于它的东西并不在考虑范围之内。”据我了解,这就是您问题的答案。

为了解决此问题,不要尝试将 Task1Task2 重用为任务,而是重用它们内部的代码。让 Task1Task2 调用您定义的普通方法,然后让 myTask2 调用这些相同的方法,并向它们传递不同的参数。换句话说,不要尝试通过设置来解决问题;通过普通Scala代码即可解决。

或者,这是您可以采取的另一种方法。如果您将 myTask2 设为命令而不是任务,则可以执行您想要的操作。请参阅 http://www.scala-sbt.org/release/docs/Extending/Commands.html,其中显示“命令可以查看或修改其他 sbt 设置”。

关于scala - 如何定义新设置并为任务设置其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20397502/

相关文章:

java - 在 Java 中解析 scalaz.Validation

scala - sbt 不支持开发者 key 有什么原因吗?

scala - 如何为 'sbt console' 设置彩色 REPL?

scala - 由于 "Invalid memory access of location"导致的 JVM 段错误

scaladoc 玩!带有 Scala 模块的框架

java - Scala - Java 互操作 - 是否可以从 scala 调用 "choose"调用的 java 方法?

scala - 从 socko 迁移到 akka-http websockets

multithreading - 如何为 future 配置微调线程池?

scala - 为什么SBT的线程上下文类加载器不能加载JDK类文件作为资源?

java - (合作)列表的差异与 Scala 中的堆栈不同?