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. J'intègre maintenant un produit tiers qui a une version fourmi. Je sais comment appeler des cibles fourmis de maven en utilisant le plugin antrun, mais je ne sais pas 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 extrait l'artefact qui a été construit par fourmi lorsque l'objectif de déploiement de maven est exécuté.
Je prévois d'avoir le pom adjacent à build.xml. Le pom utilisera le plugin antrun dans l'objectif du package pour appeler la cible ant au moment opportun pour construire l'artefact .war.
Des questions:
a) Je crée un fichier .war mais il est créé via ant, pas Maven, donc avoir un type d'empaquetage war dans le pom n'a pas de sens. Quel doit être mon type d'emballage?
b) Comment puis-je amener maven à extraire l'artefact de mon répertoire de sortie fourmi 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 ant qui répliquent la fonctionnalité de déploiement de maven pour obtenir mon artefact .war dans le référentiel partagé?
Vous pouvez utiliser maven-antrun-plugin pour invoquer la construction de fourmi. Ensuite, utilisez build-helper-maven-plugin pour attacher le fichier 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'empaquetage pom
, Maven n'entrera pas en conflit avec la version ant.
Dans l'exemple ci-dessous, le fichier ant build.xml est supposé être dans src/main/ant, avoir un objectif compile
et être renvoyé à 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>
Vous pouvez en fait encapsuler un projet ANT avec Maven en utilisant plusieurs objectifs d'exécution de fourmis comme je l'ai écrit dans une question différente. En supposant que votre projet ant existant ait des tâches de nettoyage et de construction, cela pourrait être un moyen utile d'encapsuler le projet afin que vous puissiez utiliser les objectifs maven et le faire correspondre au code ant existant.
<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>
Reportez-vous ceci: Pourquoi vous devriez utiliser les tâches Maven Ant au lieu de Maven ou Ivy
Et plus précisément, comment invoquer un objectif Maven depuis Ant peut être trouvé dans cet exemple:
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.