如何在 scripts 文件夹中包含 "sbt dist" 在目标/通用中生成的其他文件?



运行sbt dist产生的输出看起来像这样:

    project_dir 
  | 
  |--- target/universal
          |
          |
          |
          | --- scripts
          |        |
          |        |--- blah.bat
          |        |--- blah (.sh file)
          |
          | --- blah-1.0-SNAPSHOT.zip (entire package zipped)

如何复制文件,以使其最终放在目标/通用/脚本文件夹中?我尝试过的任何"通用映射"技巧中的任何"映射"都会导致我要复制在zip中的文件。

一个不起作用的例子:

mappings in Universal ++=(baseDirectory.value / "scripts" * "*" get) map (x => x -> { x.setExecutable(true); baseDirectory.value.toString + "/test/" +  x.getName;} )

如果我正确理解您的问题,您有两个问题。首先

我如何复制文件,以使其最终出现在目标/通用/脚本文件夹中

这很可能不是您想要的。target/universal/scripts文件夹不过是临时文件夹是在被拉开之前生成的脚本。

您可以用几行Scala

在任意目录中创建文件
lazy val writeSomeFiles = taskKey[Seq[File]]("Creates some files")
writeSomeFiles := {
  // `target/universal` folder
  val universalTarget = (target in Universal).value
  val sourceFiles = (baseDirectory.value ** AllPassFilter).get
  val destFiles = sourceFiles.map(file =>  universalTarget / file.getNamae)
  IO.copy(sourceFiles.zipWith(destFiles))
  destFiles
}

请参阅:https://www.scala-sbt.org/1.x/api/sbt/io/allpassfilter$.html请参阅:https://www.scala-sbt.org/1.x/api/sbt/io/ioqu.html

第二:

我尝试过的任何"通用映射"技巧都会导致我要复制的文件,最终在zip

这正是mappings in Universal。您创建的软件包的内容(在这种情况下为zip文件(。dist(或universal:packageBin(任务正好返回一个文件,即创建的zip文件。

如果您打算运送包裹,那么这是处理物品的正确方法。

希望有帮助,muki

最新更新