如何在脚本文件夹中包含一个附加文件" sbt dist"生成内部目标/通用?

时间:2018-03-29 22:06:55

标签: sbt sbt-native-packager sbt-plugin

运行sbt dist会产生如下所示的输出:

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

如何复制文件以使其最终位于target / universal / scripts文件夹中? Universal"中的任何"映射我尝试过的技巧导致我复制的文件以zip格式结束。

一个没有用的例子:

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

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题你有两个问题。第一

  

如何复制文件以使其最终位于target / universal / scripts文件夹中

这很可能不是你想要的。 <{1}}文件夹只是一个临时文件夹,在压缩之前会生成脚本。

您可以使用几行scala

在任意目录中创建文件
target/universal/scripts

请参阅: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结尾

这正是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 } 的内容。您创建的包的内容(在本例中为zip文件)。 mappings in Universal(或dist)任务只返回一个文件,即创建的zip文件。

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

希望有所帮助, 缪奇