En la definición de construcción de mi proyecto, SettingKey use Proguard en el alcance de Android se establece en verdadero. Esto es lo que quiero por defecto. Sin embargo, cuando ejecuto una tarea en particular, quiero que useProguard sea falso. Todo en el alcance de Android proviene del sbt-android-plugin.Usando SBT, ¿cómo se ejecuta una tarea con un valor de configuración [T] diferente en el tiempo de ejecución?
No estoy seguro de cuál es la mejor manera de resolver este problema. Según lo que leí, parece que un comando puede hacer el trabajo, ya que puede ejecutar una tarea con un estado diferente al que ve su sesión actual. Intenté crear un comando de esta forma:
def buildWithoutProguard = Command.command("build-without-proguard") { state =>
val extracted = Project.extract(state)
import extracted._
val transformed = session.mergeSettings :+ (useProguard in Android := false)
val newStructure = Load.reapply(transformed, structure)
val newState = Project.setProject(session, newStructure, state)
Project.evaluateTask(buildAndRun, newState)
state
}
estoy añadiendo el comando para la configuración de mi proyecto y ejecutar el comando 'build-sin-Proguard' ejecuta la tarea buildAndRun lo deseas. Sin embargo, useProguard sigue siendo verdadero en lugar de falso, como era de esperar.
En primer lugar, este enfoque se siente pesado para mí. Asumiendo que cambiar el plugin sbt-android no es una opción aquí, ¿cómo podría resolver este problema?
En segundo lugar, ¿por qué este enfoque no funciona como está?
posible duplicado de [Cómo cambiar la configuración de comandos dentro de SBT?] (Http://stackoverflow.com/questions/14262798/how-to-change-setting-inside-sbt-command) –