Pregunta Ejecuta tareas personalizadas automáticamente antes / después de la tarea estándar


A menudo quiero hacer algunas personalizaciones antes de ejecutar una de las tareas estándar. Me doy cuenta de que puedo hacer nuevas tareas que ejecutan tareas existentes en el orden que quiero, pero me parece engorroso y la posibilidad de que un desarrollador omita que se supone que debe ejecutar my-compile en lugar de compilar es grande y conduce a errores difíciles de corregir .

Entonces quiero definir una tarea personalizada (por ejemplo preparar-aplicación) e inyectarlo en el árbol de dependencias de las tareas existentes (por ejemplo, paquete-bin) para que cada vez que alguien invoca paquete-bin mis tareas personalizadas se ejecutan justo antes.

Intenté hacer esto

  def mySettings = {
    inConfig(Compile)(Seq(prepareAppTask <<= packageBin in Compile map { (pkg: File) =>
      // fiddle with the /target folder before package-bin makes it into a jar
    })) ++
    Seq(name := "my project", version := "1.0")
  }

  lazy val prepareAppTask = TaskKey[Unit]("prepare-app")

pero no se ejecuta automáticamente por paquete-bin justo antes de empacar la salida de compilación en un contenedor. Entonces, ¿cómo alterar el código anterior para ejecutar en el momento adecuado?

De manera más general, ¿dónde puedo encontrar información sobre cómo engancharme en otras tareas, como compilar, y si existe una forma general de garantizar que se ejecuten las tareas propias antes y después de que se invoquen las tareas estándar?


32
2017-10-19 11:58


origen


Respuestas:


La ampliación de una tarea existente está documentada en la documentación de SBT para Tareas (mira la sección Modificar una tarea existente)

Algo como esto:

compile in Compile <<= (compile in Compile) map { _ => 
  // what you want to happen after compile goes here 
}

En realidad, hay otra manera: defina su tarea para depender de la compilación

prepareAppTask := (whatever you want to do) dependsOn compile

y luego modifique packageBin para que dependa de eso:

packageBin <<= packageBin dependsOn prepareAppTask

(Todos los anteriores no han sido probados, pero el impulso general debería funcionar, espero).


33
2017-10-19 13:22