gpt4 book ai didi

sbt - 如何从 AutoPlugin 覆盖默认任务?

转载 作者:行者123 更新时间:2023-12-02 00:04:13 25 4
gpt4 key购买 nike

假设我想要覆盖(替换)packageBin 任务的默认设置。所以我天真地写了一个这样的AutoPlugin:

object TestPlugin extends AutoPlugin {

override def trigger = allRequirements

override val projectSettings: Seq[Def.Setting[_]] = Seq(
packageBin in Compile <<= (packageBin in Compile).map { a =>
println("project/compile::packageBin")
a
}
)

}

但这不起作用(至少对于 SBT 0.13.5 和 0.13.6-M1 不起作用),我的 packageBin 版本从未被调用。如果我将以下行放入项目的 build.sbt 文件中,那么它就可以工作。

packageBin in Compile <<= (packageBin in Compile).map { a => println("project/compile::packageBin"); a }

是否有可能通过 AutoPlugin 或经典插件来实现这一目标,如果可以的话如何实现?

最佳答案

我找到了问题的解决方案here .

为了确保 AutoPlugin 的设置不会被默认设置覆盖,必须在默认设置之后应用 AutoPlugin 中的设置。默认设置由包 sbt.plugins 中的 AutoPlugins 设置。 (CorePlugin、IvyPlugin、JvmPlugin)。

所以我所要做的就是通过将以下覆盖添加到我的 AutoPlugin 中,使我的 AutoPlugin 依赖于 JvmPlugin:

override def requires: Plugins = JvmPlugin

覆盖packageBin的完整自动插件如下:

import sbt._
import Keys._
import plugins.JvmPlugin

object TestPlugin extends AutoPlugin {

override def requires = JvmPlugin
override def trigger = allRequirements

override val projectSettings: Seq[Def.Setting[_]] = Seq(
packageBin in Compile <<= (packageBin in Compile).map { a =>
println("project/compile::packageBin")
a
}
)
}

关于sbt - 如何从 AutoPlugin 覆盖默认任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25247662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com