Как временно пропустить выполнение задачи компиляции в пользовательской команде sbt?

Я пытаюсь временно пропустить задачу компиляции при запуске задачи packageиз команды quick-install(, определенной в плагине sbt I пишу ). Я могу пропустить все компиляции, установив параметр skipдля задачи compile, но это приводит к тому, что все задачи compileбудут пропущены :

  object MyPlugin extends Plugin {
    override lazy val settings = Seq(
      (skip in compile) := true
    )
   ...
  }

. Мне нужно пропустить только compileпри запуске моего quick-installкоманда. Есть ли способ временно изменить параметр или ограничить его только моей командой быстрой установки -?

Я попытался преобразовать настройки (на основеhttps://github.com/harrah/xsbt/wiki/Advanced-Command-Example), которые должны заменить все экземпляры skip := falseна skip := true, но это не имеет никакого эффекта (, т.е. компиляция все еще происходит после преобразование):

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)

   ...
}

Любая идея, что мне не хватает и/или лучший способ сделать это?

Изменить:

Параметр пропуска — это задача, поэтому легко исправить:

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
  }
}

Я не уверен, что это самое надежное решение, но, похоже, оно работает для того, что мне нужно.

6
задан Steve Wampler 18 April 2012 в 20:46
поделиться