gpt4 book ai didi

scala - 如何依赖其他任务并在 SBT 0.10 中执行您的代码?

转载 作者:行者123 更新时间:2023-12-04 20:53:37 25 4
gpt4 key购买 nike

我想定义一个任务,它调用 compile 和 packageBin 任务,然后做它的事情。我怎么做?目前这仅执行第二部分并跳过 compile 和 packageBin 任务。

lazy val dist = TaskKey[Unit](
"dist", "Creates a project distribution in dist/ folder."
)
def distTask = {
dist <<= dist.dependsOn(compile, packageBin)
dist <<= (update, crossTarget).map { case (updateReport, out) =>
updateReport.allFiles.foreach { srcPath =>
val destPath = out / "lib" / srcPath.getName
IO.copyFile(srcPath, destPath, preserveLastModified=true)
}
}
}

最佳答案

<<=是 TaskKey 上的一个返回值的方法。它不会在任何地方更新可变状态,因此在示例代码中,第一次调用的结果将被丢弃。要解决此问题,请将 packageBin 也声明为输入,但忽略结果值。注意 packageBin 依赖于 compile,所以依赖 compile 是不必要的。

dist <<= (update, crossTarget, packageBin in Compile) map { (updateReport, out, _) =>

您不太可能想要复制 UpdateReport 中的所有文件。到仅基于文件名的目录。不同的依赖项可能具有相同的文件名。此外,这将包括来自所有配置的依赖项,包括测试依赖项。

对于第一个问题,使用关联的 ModuleID在目标目录中构建路径,就像在 lib_managed 中所做的那样目录当 retrieveManaged := true .对于第二个问题,只选择你想要的配置文件。
updateReport.matching(configurationFilter(Runtime.name)).foreach...

sbt.UpdateReportsbt.RichUpdateReport其他有用方法的 API 文档。

如果你不关心文件名冲突,你可以从 dependencyClasspath 获取依赖文件。例如:
dist <<= (crossTarget, packageBin in Compile, dependencyClasspath in Runtime) map { (out, _, cp) =>

并获得 Seq[File]来自 cp.files .

关于scala - 如何依赖其他任务并在 SBT 0.10 中执行您的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7400849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com