如何在SBT autoplugin中将生成器任务添加到resourceGenerators?
我正在SBT中编写一个如何在SBT autoplugin中将生成器任务添加到resourceGenerators?,sbt,Sbt,我正在SBT中编写一个Autoplugin。该插件应将一些文件生成到resourceManaged中。对于下面的代码(正在进行的工作),当我运行编译时,我没有看到FOOO输出,但当我使用yamlGen直接调用任务时,我看到了输出,这使我认为出于某种原因,我的任务没有正确地添加为资源生成器。我检查了很多其他的发电机插件,他们基本上就是这样做的。这里有什么问题 import sbt._ import Keys._ object SamplePlugin extends AutoPlugin {
Autoplugin
。该插件应将一些文件生成到resourceManaged
中。对于下面的代码(正在进行的工作),当我运行编译时,我没有看到FOOO
输出,但当我使用yamlGen
直接调用任务时,我看到了输出,这使我认为出于某种原因,我的任务没有正确地添加为资源生成器。我检查了很多其他的发电机插件,他们基本上就是这样做的。这里有什么问题
import sbt._
import Keys._
object SamplePlugin extends AutoPlugin {
override def trigger = allRequirements
val yamlSourceFolder = SettingKey[File](
"yaml-source-folder",
"description"
)
val yamlSources = SettingKey[Seq[File]](
"yaml-sources",
"description"
)
val outputFolder = SettingKey[File](
"output-folder",
"description"
)
val yamlGen = TaskKey[Seq[File]](
"yaml-gen",
"description"
)
def yamlSettings(conf: Configuration): Seq[Setting[_]] = inConfig(conf)(Seq(
yamlSourceFolder <<= (sourceDirectory in Compile) { _ / "yamin" },
yamlSources <<= yamlSourceFolder { srcDir => (srcDir ** "*.yaml").get },
outputFolder <<= (resourceManaged in Compile) { _ / "yamout" },
yamlGen <<= (streams, yamlSources, outputFolder).map {
(out, sources, outputDir) =>
println("FOOO")
// implement me
(outputDir ** "*.abc").get
},
resourceGenerators <+= yamlGen
))
override def projectSettings = yamlSettings(Compile)
}
导入sbt_
导入密钥_
对象SamplePlugin扩展了AutoPlugin{
覆盖def触发器=所有要求
val yamlSourceFolder=设置键[文件](
“yaml源文件夹”,
“说明”
)
val yamlSources=SettingKey[Seq[File]](
“yaml来源”,
“说明”
)
val outputFolder=设置键[文件](
“输出文件夹”,
“说明”
)
val yamlGen=TaskKey[Seq[File]](
“亚姆根”,
“说明”
)
def yamlSettings(形态:配置):Seq[设置[]]=inConfig(形态)(Seq(
yamlSourceFolder在其他论坛上找到了马克·哈拉的答案
compile
不会触发资源生成,因为编译不需要它。它将在package
或run
或其他需要资源的任务中触发
然而,让我困惑的是,您需要在项目中直接添加yamlGen:
val root = (project in file("."))
.enablePlugins(SamplePlugin)
.settings(
resourceGenerators in Compile <+= yamlGen in Compile
)
val root=(文件中的项目(“.”)
.enablePlugins(SamplePlugin)
.设置(
使用Joshua Suereth提供的resourceGenerators in Compile,我使其正常工作。缺少对JvmPlugin
的依赖项,这显然是必需的,因此我在resourceGenerators
中的生成器不会被覆盖。添加此项修复了它:
override def requires: Plugins = plugins.JvmPlugin