【发布时间】:2021-07-31 19:57:34
【问题描述】:
我编写了一个插件来处理一些 SQL 文件并生成新的作为托管资源的文件。当我运行“sbt compile”时,文件会生成到 target/resource_managed/main/sql 文件夹中。当我运行 'sbt run' 或 'sbt test' 时,它们并没有像我预期的那样复制到目标/类目录中,因此在类路径中查找它们的代码找不到它们。
这是插件的代码:
object SqlProcessorPlugin extends AutoPlugin {
import autoImport._
override def requires = plugins.JvmPlugin
override def trigger = noTrigger
object autoImport {
lazy val processorSettings = taskKey[File]("Settings for sql processing")
lazy val processSqlTask = taskKey[Seq[File]]("Process Sql")
def configProcessor(cfg: Configuration) = {
inConfig(cfg) {
Seq(
target in processorSettings := resourceManaged.value / "sql",
sourceDirectory in processorSettings := sourceDirectory.value / "sql",
processSqlTask / fileInputs += (sourceDirectory in processorSettings).value.toGlob / ** / "*.sql",
processSqlTask := {
SqlProcessor.process(
processSqlTask.inputFileChanges,
(target in processorSettings).value
)
},
resourceGenerators += processSqlTask.taskValue,
)
}
}
override val projectSettings = configProcessor(Compile)
}
}
我已经根据其他问题和其他插件的示例对此进行了很多尝试,但没有任何结果导致生成的文件被复制到类路径中。
我在这里错过了什么/做错了什么?
【问题讨论】:
-
SqlProcessor.process是否返回所有生成的文件? -
是的,它返回生成的文件。我发现它正在复制文件,而不是我期望的地方。它不是目标/类,而是将它们复制到目标/类/scala-2.13/classes/resource_managed。如何让它们直接复制到类文件夹下?