ifr*_*ain 8 scala sbt sbt-native-packager
我正在从maven切换到sbt我正在研究的Scala项目.我曾经使用maven程序集插件,您可以将工作空间中的任何目录映射到程序集中的目标目录.我没有在sbt-native-package中找到任何等价物,值得为Universe类提供此功能.
我知道通用子目录中存在的所有东西都被复制到包中,它就像一个魅力,但我缺少类似下面的代码片段.
mappings in Universal += {
directory("my/local/dir") -> "static/dirInPackage"
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否已经有办法做到这一点,在这种情况下,我很乐意知道该怎么做,如果你愿意,我建议我帮助提交该部分的文档.如果没有办法进行这种定制,我很乐意在讨论规范后提出补丁.
顺便说一句,干得好,你的打包工作得很好,谢谢!
ifr*_*ain 11
在与sbt-native-manager团队讨论并首次"拒绝"拉取请求之后,这里是在build.sbt文件中执行此目录映射的方法(请参阅pull请求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)
}
Run Code Online (Sandbox Code Playgroud)
为了减少上述代码片段的详细程度,有一个问题(https://github.com/sbt/sbt-native-packager/issues/161)提出了一种更易读的方式来表达此目录映射:
mappings in Universal ++= allFilesRelativeTo(file(target / "scala-2.10" / "api"))
Run Code Online (Sandbox Code Playgroud)
来自https://github.com/sbt/sbt-native-packager
如果您想将其他文件添加到安装目录,只需将它们添加到通用映射:
import com.typesafe.sbt.SbtNativePackager.Universal
mappings in Universal += {
file("my/local/conffile") -> "conf/my.conf"
}
Run Code Online (Sandbox Code Playgroud)
您可以在目录方法结果的顶部使用一个简单的映射。
==>目录方法文档:MappingsHelper.directory
例如://包装/src/main/resources
under 的内容,conf
添加以下内容:
mappings in Universal ++= (directory("src/main/resources").map(t => (t._1, t._2.replace("resources", "conf"))))
Run Code Online (Sandbox Code Playgroud)