我正在从maven切换到我正在处理的Scala项目的sbt。我曾经使用maven程序集插件,您可以将工作空间中的任何目录映射到程序集中的目标目录。我在sbt-native-package中找不到任何等价物,值得为Universe类提供此功能。
我知道通用子目录中存在的所有内容都会被复制到包中,它就像一个魅力,但我缺少类似下面的代码片段。
mappings in Universal += {
directory("my/local/dir") -> "static/dirInPackage"
}
我想知道是否已经有办法做到这一点,在这种情况下,我很乐意知道该怎么做,如果你愿意,我建议我帮助提交该部分的文档。 如果没有办法进行这种定制,我很乐意在讨论规范后提出补丁。
顺便说一下,干得好,你的打包工作得非常好,谢谢!
答案 0 :(得分:10)
在与sbt-native-manager团队和第一个“被拒绝”拉取请求讨论之后,以下是在build.sbt文件中执行此目录映射的方法(请参阅提供模式的pull request https://github.com/sbt/sbt-native-packager/pull/160详细文档):
mappings in Universal <++= (packageBin in Compile, target ) map { (_, target) =>
val dir = target / "scala-2.10" / "api"
(dir.***) pair relativeTo(dir.getParentFile)
}
为了减少上述代码段的详细程度,有一个问题(https://github.com/sbt/sbt-native-packager/issues/161)提出了一种表达此目录映射的更易读的方法:
mappings in Universal ++= allFilesRelativeTo(file(target / "scala-2.10" / "api"))
答案 1 :(得分:5)
来自https://github.com/sbt/sbt-native-packager
如果您想将其他文件添加到安装目录,只需将它们添加到通用映射:
import com.typesafe.sbt.SbtNativePackager.Universal
mappings in Universal += {
file("my/local/conffile") -> "conf/my.conf"
}
答案 2 :(得分:4)
您可以在目录方法结果的顶部使用简单的地图。
==&GT;目录方法文档:MappingsHelper.directory
例如:
//在/src/main/resources
下打包conf
的内容添加以下内容:
mappings in Universal ++= (directory("src/main/resources").map(t => (t._1, t._2.replace("resources", "conf"))))
答案 3 :(得分:0)
获取res/scripts/
中的所有文件,并在解压缩时将其放入bin/
目录。
// In build.sbt
mappings in Universal <++= (packageBin in Compile) map { jar =>
val scriptsDir = new java.io.File("res/scripts/")
scriptsDir.listFiles.toSeq.map { f =>
f -> ("bin/" + f.getName)
}
}
如果您选择的文件未创建,则会为您创建,例如assets/
将为文件创建一个新的assets
文件夹。如果你想使用这种方法在这个文件里面,你必须至少做一个新的Seq
我所做的。这是我的例子
assets/
├── scripts
│ └── install_dependencies.sh
└── urbangrizzly.database
以及相应的build.sbt
部分:
mappings in Universal <++= (packageBin in Compile) map { jar =>
val assetsDir = new java.io.File("assets/")
val scriptsDir = new java.io.File("assets/scripts")
assetsDir.listFiles.toSeq.map { files =>
files -> ("assets/" + files.getName)
} ++ scriptsDir.listFiles.toSeq.map { files =>
files -> ("assets/scripts/" + files.getName)
}
}
如果您需要更多,请继续使用++
运算符来连接列表