2012-01-18 5 views
5

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á?

+0

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) –

Respuesta

2

Por lo que entiendo de su pregunta, desea que la configuración sea diferente para una dependencia dependiendo de lo que dependa de ella. Esto no tiene sentido: una dependencia está satisfecha o no, y lo que depende de ella no entra en la ecuación.

Su solución me parece satisfactoria. Una alternativa sería hacer dos proyectos, apuntando a la misma fuente, pero con diferentes configuraciones de proguard y objetivo diferente, por lo que uno construiría con y el otro sin proguard, y ambos mantendrían su estado. Luego harás lo que quieras solo cambiando los proyectos.

+0

Hola Daniel, gracias por la responder. Proyecto separado parece ser el camino a seguir. Todavía tengo curiosidad de por qué el comando no funciona como parece. – James

+0

¿El eje de tareas no hace algo como "cambiar la dependencia en función de lo que depende de ello"? Si tiene una tarea que depende de una configuración, ¿no puede la configuración tener diferentes valores dependiendo de qué tarea se está ejecutando? –

+0

@JamesMoore No, no funciona, y no, no puede. –

Cuestiones relacionadas