向Sbt-Native-Packager(sbt 1.2)中的linuxPackageMapping任务添加依赖项

时间:2019-01-14 22:39:14

标签: scala sbt sbt-native-packager

我正在尝试使用本地打包程序插件构建rpm,该插件包含由使用sbt 1.2.7的自定义文件处理任务生成的文件。

最初执行此操作的方式是在我的linuxPackageMapping更新之一中进行processFiles.value调用

    Rpm / linuxPackageMappings += {
      val postDir = (Compile / processFiles / target).value
      val pfiles = (Compile / processFiles).value
      val profile = profileData.value
      val myDir = postDir / "tango"
      val files =  myDir * "*" filter { _.isFile }
      // Create packageMapping here
    }

那很好,但是我注意到我实际上并没有使用pfiles。我担心它已经运行了,所以填充了postDir,但是由于我正在执行文件搜索以实际拉出所需的文件,因此在该位置(以及其他多个位置)似乎是多余的重复此模式的代码)。因此,我决定变得聪明,并将其重构为一个整体。更高级别的设置。

linuxPackageMappings := (linuxPackageMappings.dependsOn(Compile / processFiles)).value,
Rpm / linuxPackageMappings := ((Rpm / linuxPackageMappings).dependsOn(Compile / processFiles)).value,

根据我对文档的理解,这应该导致(Compile / processFiles)linuxPackageMappings中发生任何事情之前运行。

我已经通过打印语句验证了这没有发生。在rpm:packageBin之后运行clean会导致生成RPM,但其中没有processFiles任务的输出。以上代码段中的files变量为空。如果我随后重新运行同一任务,则新的RPM将具有输出。在rpm:packageBin的第一次运行之后,手动检查进程输出目录会发现文件在那里。因此它被触发了,只是在过程中还不够快。

processFiles任务确实使用FileFunction.cached来防止它不必要地重新运行,但是其中没有任何显式线程(这可能导致它并行执行)。

我可以通过将对(Compile / processFiles).value的调用重新粘贴到需要输出的所有linuxPackageMapping调用中来解决此问题,但我希望任务图能够正常工作。

0 个答案:

没有答案