39 votes

Comment envelopper une construction Ant avec Maven ?

Nous utilisons maven pour notre produit de grande taille. Tous nos artefacts sont déployés dans un référentiel archiva partagé à l'aide de l'objectif de déploiement maven. Je suis en train d'intégrer un produit tiers qui a un build ant. Je sais comment appeler les cibles ant à partir de maven en utilisant le plugin antrun, mais je ne suis pas sûr de savoir comment configurer le pom dans ce cas. Je ne veux pas que maven génère réellement un artefact, mais je veux qu'il tire l'artefact qui a été construit par ant lorsque l'objectif de déploiement maven est exécuté.

J'ai l'intention de faire en sorte que le pom soit adjacent au build.xml. Le pom utilisera le plugin antrun dans le but du paquet pour appeler la cible ant au moment approprié pour construire l'artefact .war.

Questions :

a) Je suis en train de créer un fichier .war mais il est créé via ant, pas Maven, donc avoir un type de packaging war dans le pom n'a pas de sens. Quel devrait être mon type de packaging ?

b) Comment puis-je faire en sorte que maven tire l'artefact de mon répertoire de sortie ant pour l'objectif de déploiement ?

c) S'il n'y a pas de bonnes réponses à A et B, existe-t-il des tâches fourmi qui reproduisent la fonctionnalité de déploiement maven pour placer mon artefact .war dans le dépôt partagé ?

52voto

Rich Seller Points 46052

Vous pouvez utiliser le maven-antrun-plugin pour invoquer la construction de la fourmi. Ensuite, utilisez l'option build-helper-maven-plugin pour attacher le jar produit par ant au projet. L'artefact attaché sera installé/déployé à côté du pom.
Si vous spécifiez votre projet avec l'emballage pom Maven n'entrera pas en conflit avec la construction de Ant.

Dans l'exemple ci-dessous, le fichier ant build.xml est supposé se trouver dans src/main/ant, avoir un fichier compile objectif, et sortie vers ant-output.jar .

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <phase>process-resources</phase>
      <configuration>
        <tasks>
          <ant antfile="src/main/ant/build.xml" target="compile"/>
        </tasks>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <id>add-jar</id>
      <phase>package</phase>
      <goals>
        <goal>attach-artifact</goal>
      </goals>
      <configuration>
        <artifacts>
          <artifact>
            <file>${project.build.directory}/ant-output.jar</file>
            <type>jar</type>
          </artifact>
        </artifacts>
      </configuration>
    </execution>
  </executions>
</plugin>

3voto

sal Points 8058

Vous pouvez en fait envelopper un projet ANT avec Maven en utilisant objectifs multiples de la course de fourmis comme je l'ai écrit dans une autre question. En supposant que votre projet ant existant possède des tâches de nettoyage et de construction, cela pourrait être un moyen utile d'envelopper le projet afin que vous puissiez utiliser les objectifs de maven et les faire correspondre au code ant existant.

1voto

keats Points 13
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.3.1</version>
    <executions>
        <execution>
            <id>install-library</id>
            <phase>install</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>x.x</groupId>
                <artifactId>ant-out-atifacts</artifactId>
                <version>${project.version}</version>
                <file>ant-output.jar</file>
                <packaging>zip</packaging>
            </configuration>
        </execution>
    </executions>
</plugin>

0voto

Peter Thomas Points 820

Référez-vous à ceci : Pourquoi vous devriez utiliser les tâches Maven Ant au lieu de Maven ou Ivy

Et plus précisément, cet exemple montre comment invoquer un objectif Maven à partir de Ant :

http://code.google.com/p/perfbench/source/browse/trunk/perfbench/grails-gorm/build.xml

Avec les informations ci-dessus, vous devriez être en mesure de réaliser ce dont vous avez besoin. Faites-moi savoir si vous avez des questions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X