scala – 在jar中包含生成的资源(SBT)
我一直在编写一个SBT插件,可以在resource_managed中生成资源.我现在希望将这些生成的资源包含在生成的jar中,如SBT docs详细说明:
Generating resources:
我已经阅读了文档但老实说如何做到这一点我无法弄清楚.任何人都可以解释它或指向另一个项目,这样我就可以看到他们是如何做到的? 解决方法
首先澄清一下,它们包含在包含编译类的jar中.它们不包含在含有来源的罐子中.
对于packageBin,应该已经包含生成的文件 – 只需确保从生成器方法返回所有生成的文件.假设您要将它们打包在sources工件中,这就是您必须要做的. 假设您有一个生成属性文件的生成器. lazy val generatePropertiesTask = Def.task { val file = (resourceManaged in Compile).value / "stack-overflow" / "res.properties" val contents = s"name=${name.value}nversion=${version.value}" IO.write(file,contents) Seq(file) } resourceGenerators in Compile += generatePropertiesTask.taskValue 要在生成的源中包含它,您必须告诉sbt必须在生成的源artefact中复制res.properties的位置.生成打包源的任务称为packageSrc,因此您必须设置映射scoped to that task. mappings in (Compile,packageSrc) += { ((resourceManaged in Compile).value / "stack-overflow" / "res.properties") -> "path/in/jar/res.properties" } 因为您的生成器可以生成许多任务,并且每个手动映射将是一项繁琐的任务,sbt为您提供了一次映射多个路径的utility. mappings in (Compile,packageSrc) ++= { val allGeneratedFiles = ((resourceManaged in Compile).value ** "*") filter { _.isFile } allGeneratedFiles.get pair relativeTo((resourceManaged in Compile).value) } 第一行使用path finders查找所有生成的文件,第二行将它们映射到目标jar中的路径. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |