0

运行 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;} )
4

1 回答 1

1

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

我如何去复制一个文件,以便它最终在 target/universal/scripts 文件夹中

这很可能不是您想要的。该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/IO $.html

第二:

我尝试过的任何“通用映射”技巧都会导致我复制的文件最终出现在 zip 中

这正是事实mappings in Universal。您创建的包的内容(在本例中为 zip 文件)。( distor universal:packageBin) 任务只返回一个文件,即创建的 zip 文件。

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

希望有帮助,穆基

于 2018-03-30T15:37:29.197 回答