加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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].

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读