假设我要覆盖(替换)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
}
)
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用(至少不适用于SBT 0.13.5和0.13.6-M1),我的版本packageBin从未调用过.如果我将以下行放在项目的build.sbt文件中,那么它可以工作.
packageBin in Compile <<= (packageBin in Compile).map { a => println("project/compile::packageBin"); a }
Run Code Online (Sandbox Code Playgroud)
是否有可能从AutoPlugin或经典插件中实现这一点,如果是这样,怎么样?
我在这里找到了问题的解决方案.
为了确保默认设置不会覆盖AutoPlugin的设置,必须在默认设置后应用AutoPlugin中的设置.默认设置由软件包sbt.plugins(CorePlugin,IvyPlugin,JvmPlugin)中的AutoPlugins设置.
所以我必须做的就是通过向我的AutoPlugin添加以下覆盖来使我的AutoPlugin依赖于JvmPlugin:
override def requires: Plugins = JvmPlugin
Run Code Online (Sandbox Code Playgroud)
覆盖的完整autoplugin 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
}
)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1126 次 |
| 最近记录: |