2010-07-29 5 views
1

Je convertis ant en maven2. Je rencontre un problème. S'il vous plaît aidez-moi: En build.xml, j'aiConversion de Ant en Maven: problème avec l'attribut cible "dépend" de Ant

<target name="clean"> 
    <delete file="${dir.dist}/${api.jarfile}" /> 
    <delete dir="${dir.build}/**" /> 
/target> 
<target name="prepare1" depends="clean"> 
    <mkdir dir="${dir.build}" /> 
    <mkdir dir="${dir.generated.code.junit}/build" /> 
    <mkdir dir="${dir.dist}" /> 
</target> 
<target name="prepare2" depends="clean"> 
    <mkdir dir="${dir.deploy}" /> 
    <mkdir dir="${dir.dist}" /> 
</target> 

Maven J'utilise antrun plugin. Antrun fonctionne bien avec la première cible. Mais pour la deuxième cible, antrun ne supporte pas "depends". Je peux faire un truc comme: mettre la première cible en phase propre et la seconde en phase post-nettoyage. La deuxième cible sera donc lancée après la première cible. Mais pour la 3ème cible, cette astuce ne fonctionnera pas car la 3ème cible ne devrait être lancée qu'après la 1ère cible (je ne veux pas que la 2ème cible soit exécutée lors de la 3ème manche).

De toute façon, cette astuce ne fonctionnera pas car mon build.xml est un gros fichier avec de nombreuses cibles et la relation entre elles est compliquée.

Y a-t-il un moyen de résoudre ce problème? Y at-il quelque chose dans maven qui fait qu'une tâche dépend d'une autre tâche?

Merci.

Répondre

1

a) Pourquoi ne pas les jeter ensemble? Lorsque vous exécutez ant avec maven, vous ne pouvez pas appeler des cibles individuelles de toute façon, vous liez une course de fourmi à une phase maven. Ainsi, vous pouvez faire ce qui suit dans la phase de nettoyage:

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.4</version> 
    <executions> 
     <execution> 
     <phase>clean</phase> 
     <configuration> 
      <tasks> 
      <delete file="${dir.dist}/${api.jarfile}" /> 
      <delete dir="${dir.build}/**" /> 
      <mkdir dir="${dir.build}" /> 
      <mkdir dir="${dir.generated.code.junit}/build" /> 
      <mkdir dir="${dir.dist}" /> 
      <mkdir dir="${dir.deploy}" /> 
      <mkdir dir="${dir.dist}" /> 
      </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

et si vous avez besoin de plus de travail dans d'autres phases, ajouter des exécutions:

 </execution> <!-- end tag from above --> 
     <execution> 
     <phase>generate-sources</phase> 
     <configuration> 
      <tasks> 
       <!-- some more ant tasks --> 
      </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 

b) si vous utilisez Maven, vous devriez penser comme le fait maven. Une grande partie de ce que vous faites dans votre tâche ant est le comportement par défaut de maven.

En phase de nettoyage, l'objectif clean:clean est exécuté, ce qui supprime le répertoire cible (et le pot avec lui). Si vous mettez tous les répertoires que vous utilisez sous la cible (ce qui est considéré comme une bonne pratique dans maven), maven les supprimera (et les créera) automatiquement.

Maven est tout au sujet de la convention:

  • tout ce qui est généré va cible à l'intérieur
  • classes et ressources pour l'artefact principal aller à l'intérieur cible/classes
  • classes et ressources pour les tests vont à l'intérieur cible/classes de test
  • les ressources générées vont à l'intérieur de target/generated-resources/yourfoldername
  • sources générées vont dans target/generated-sources/yourfoldername

Tous les principaux plugins s'attendent à ce que vous respectiez ces conventions (ils ont des valeurs par défaut selon eux) et leur utilisation rendra la vie de maven plus facile.

E.g. mvn clean veillera à ce que vous supprimiez tout ce qui a été généré. Il existe quelques exceptions, les plugins qui doivent stocker des données à différents endroits et ne peuvent donc pas être récupérés par clean: clean. Ces plugins fournissent généralement des mojos propres alternatifs (eclipse:clean et idea:clean sont des exemples), mais essayez de ne pas créer plus d'exceptions.De même, selon la convention maven, rien ne doit être créé en phase clean. Il y a beaucoup de phases pour générer des choses, comme generate-resources, generate-sources, generate-test-resources, generate-test-sources. Aussi: la création de dossiers est généralement inutile, tous les plugins maven que je connais créent des dossiers au besoin lors de l'écriture de fichiers.

+0

Merci seanizer. Ça m'aide. – David