为啥 SBT 不将生成的资源复制到 classes 文件夹?
Posted
技术标签:
【中文标题】为啥 SBT 不将生成的资源复制到 classes 文件夹?【英文标题】:Why isn't SBT copying generated resources to the classes folder?为什么 SBT 不将生成的资源复制到 classes 文件夹? 【发布时间】: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。如何让它们直接复制到类文件夹下?
【参考方案1】:
我发现了这个问题。我使用 resourceManage.value 而不是 (Compile/resourceManaged).value 作为目标目录。另外,我认为结果是它弄乱了输出文件的相对路径,导致它们被复制到错误的位置。
【讨论】:
以上是关于为啥 SBT 不将生成的资源复制到 classes 文件夹?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 sbt-native-packager 不生成 bin 目录?
让 Maven2 将资源复制到构建目录,但不将它们捆绑在 JAR 中