Estoy intentando omitir temporalmente la tarea de compilación al ejecutar la tarea package
desde un comando quick-install
(definido en un plugin sbt que estoy escribiendo). Soy capaz de saltar todas las compilaciones poniendo el ajuste skip
en la tarea compile
, pero que hace que todas las tareas compile
a ser omitidos:¿Cómo puedo omitir temporalmente la ejecución de la tarea de compilación en un comando sbt personalizado?
object MyPlugin extends Plugin {
override lazy val settings = Seq(
(skip in compile) := true
)
...
}
Lo que necesito es sólo para saltar el compile
al ejecutar mi mando quick-install
. ¿Hay alguna forma de modificar temporalmente una configuración o de adaptarla solo a mi comando de instalación rápida?
He intentado una transformación configuración (basado en https://github.com/harrah/xsbt/wiki/Advanced-Command-Example), que debe reemplazar todas las instancias de skip := false
con skip := true
, pero no tiene ningún efecto (es decir, compila todavía se producen después de la transformación):
object SbtQuickInstallPlugin extends Plugin {
private lazy val installCommand = Command.args("quick-install", "quick install that skips compile step")(doCommand(Configurations.Compile))
override lazy val settings = Seq(
commands ++= Seq(installCommand),
(Keys.skip in compile) := false // by default, don't skip compiles
)
def doCommand(configs: Configuration*)(state: State, args: Seq[String]): State = {
val extracted = Project.extract(state)
import extracted._
val oldStructure = structure
val transformedSettings = session.mergeSettings.map(
s => s.key.key match {
case skip.key => { skip in s.key.scope := true } // skip compiles
case _ => s
}
)
// apply transformed settings (in theory)
val newStructure = Load.reapply(transformedSettings, oldStructure)
Project.setProject(session, newStructure, state)
...
}
¿Alguna idea de lo que me falta y/o una mejor manera de hacer esto?
Editar:
El ajuste del salto es una tarea, por lo que era una solución fácil a:
object SbtQuickInstallPlugin extends Plugin {
private lazy val installCommand = Command.args("quick-install", "quick install that skips compile step")(doCommand(Configurations.Compile))
private var shouldSkipCompile = false // by default, don't skip compiles
override lazy val settings = Seq(
commands ++= Seq(installCommand),
(Keys.skip in compile) := shouldSkipCompile
)
def doCommand(configs: Configuration*)(state: State, args: Seq[String]): State = {
shouldSkipCompile = true // start skipping compiles
... // do stuff that would normally trigger a compile such as running the packageBin task
shouldSkipCompile = false // stop skipping compiles
}
}
No estoy convencido de que esta es la solución más robusta, pero parece que trabajar por lo Lo necesitaba.