Exécuter une tâche personnalisée automatiquement avant / après la tâche standard

Je veux souvent faire de la personnalisation avant l'exécution de l'une des tâches standard. Je me rends compte que je peux faire de nouvelles tâches qui exécutent les tâches existantes dans l'ordre que je veux, mais je trouve cela lourd et la chance qu'un développeur manque qu'il est censé exécuter my-compile au lieu de compiler est grande et conduit à des erreurs difficiles à corriger.

Je tiens Donc à définir une tâche personnalisée (dire préparer l'application) et de l'injecter dans la dépendance de l'arbre des tâches (dire package-bin) donc que chaque fois que quelqu'un appelle package-bin Mes tâches personnalisées sont exécutées juste avant.

J'ai essayé de faire ceci

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

Mais il n'est pas exécuté automatiquement par package-bin juste avant d'empaqueter la sortie de compilation dans un jar. Alors, comment puis-je modifier le code ci-dessus pour être exécuté au bon moment ?

Plus généralement, où puis-je trouver des informations sur l'accrochage dans d'autres tâches comme la compilation et Existe-t-il un moyen général de s'assurer que vos propres tâches sont exécutées avant et après un les tâches standard sont appelées ?.

32
demandé sur Lars Tackmann 2011-10-19 15:58:57

1 réponses

Extension d'une tâche existante est documenté la SBT documentation pour Tâches (voir la section Modifier une Tâche Existante).

Quelque Chose comme ceci:

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

En fait, il existe un autre moyen - définissez votre tâche pour dépendre de compile

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

Puis modifiez packageBin pour en dépendre:

packageBin <<= packageBin dependsOn prepareAppTask

(Tout ce qui précède non testé, mais la poussée générale devrait fonctionner, je l'espère).

33
répondu Paul Butcher 2016-02-15 14:55:14