Sbt 如何从AutoPlugin覆盖默认任务?
假设我想要覆盖(替换)packageBin任务的默认设置。所以我很天真地写了一个这样的自动行李:Sbt 如何从AutoPlugin覆盖默认任务?,sbt,sbt-plugin,Sbt,Sbt Plugin,假设我想要覆盖(替换)packageBin任务的默认设置。所以我很天真地写了一个这样的自动行李: object TestPlugin extends AutoPlugin { override def trigger = allRequirements override val projectSettings: Seq[Def.Setting[_]] = Seq( packageBin in Compile <<= (packageBin in Compile).
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
}
)
}
是否有可能通过AutoPlugin或经典插件实现这一点,如果有,如何实现?我找到了问题的解决方案 为了确保AutoPlugin的设置不会被默认设置覆盖,必须在默认设置之后应用AutoPlugin中的设置。默认设置由包中的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_
导入密钥_
导入plugins.JvmPlugin
对象TestPlugin扩展了AutoPlugin{
覆盖def requires=JvmPlugin
覆盖def触发器=所有要求
覆盖val项目设置:Seq[定义设置[]]=Seq(
Compile中的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 ~= { a =>
println("project/compile::packageBin")
a
}
)
}
或者使用和最后的进行副作用的后处理:
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) andFinally {
println("project/compile::packageBin")
}
)
}
导入sbt_
导入密钥_
导入plugins.JvmPlugin
对象TestPlugin扩展了AutoPlugin{
覆盖def requires=JvmPlugin
覆盖def触发器=所有要求
覆盖val项目设置:Seq[定义设置[]]=Seq(
Compile中的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) andFinally {
println("project/compile::packageBin")
}
)
}