scala – 如何依赖其他任务并在SBT 0.10中执行代码?
发布时间:2020-12-16 18:35:07 所属栏目:安全 来源:网络整理
导读:我想定义一个任务,它调用compile和packageBin任务,然后完成它的工作.我怎么做?目前这只是第二部分,并跳过编译 packageBin任务. lazy val dist = TaskKey[Unit]( "dist","Creates a project distribution in dist/ folder.")def distTask = { dist = dist.de
我想定义一个任务,它调用compile和packageBin任务,然后完成它的工作.我怎么做?目前这只是第二部分,并跳过编译& 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依赖于编译,因此根据编译是不必要的.
dist <<= (update,crossTarget,packageBin in Compile) map { (updateReport,out,_) => 您不太可能只想根据文件名将UpdateReport中的所有文件复制到目录中.不同的依赖项可能具有相同的文件名.此外,这将包括来自所有配置的依赖项,包括测试依赖项. 对于第一个问题,使用关联的ModuleID在目标目录中构造路径,就像在retrieveManaged:= true时在lib_managed目录中完成的那样.对于第二个问题,仅选择所需配置的文件. updateReport.matching(configurationFilter(Runtime.name)).foreach... 有关其他有用的方法,请参阅sbt.UpdateReport和sbt.RichUpdateReport API文档. 如果您不关心文件名冲突,可以从dependencyClasspath获取依赖项文件.例如: dist <<= (crossTarget,packageBin in Compile,dependencyClasspath in Runtime) map { (out,_,cp) => 并从cp.files获取Seq [File]. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |