J'ai besoin d'exécuter des commandes d'ant en fonction d'une variable d'environnement passée sous forme de paramètre à la commande Maven Build.
Pour le moment, j'ai 3 blocs de tâches et seules les tâches bloquées sans condition ne sont pas exécutées. < / p> Qu'est-ce que je fais mal, y a-t-il une meilleure façon de le faire? p> p>
4 Réponses :
Premièrement, selon le site Web Maven 1.x, la libération stable actuelle pour Maven 1.x est la version 1.1, pas 1.4. Deuxièmement, il n'y a pas de plugin antrun version 1.7 et, à ma connaissance, il s'agit d'un plugin maven 2. Troisièmement, la syntaxe que vous utilisez semble très similaire à Utilisation des attributs A> qui, encore une fois, est à propos de Maven 2. Donc, il me manque peut-être quelque chose, mais cela est très déroutant et vous devriez peut-être clarifier ces points dans votre question. P> Je ne suis vraiment pas sûr de la syntaxe, tout Cela maven 1 choses est trop loin, et je ne l'ai pas testé (je suis trop paresseux pour installer Maven 1). Mais je suppose que vous allez. Le Référence de script peut vous aider. P> Pour être honnête, j'espère vraiment que vous avez une bonne raison de préférer Maven 1.x sur Maven 2.x :) P> Mise à jour: strong> Il apparaît que l'OP utilise réellement Maven 2, je vais donc mettre à jour ma question en conséquence. Pour mettre en œuvre le comportement souhaité, vous pouvez utiliser puis appelle Mais tout ce n'est pas la "façon maven" de faire des choses. Maintenant que je comprends un peu mieux ce que vous essayez de faire (mais pas entièrement que vous n'avez pas expliqué votre objectif ultime), je pense qu'à utiliser Construire des profils serait plus approprié et, après avoir lu votre propre réponse, je pense que vous êtes sur des choses compliquées (et que vous êtes sur le mauvais chemin ). P> Je comprends que vous êtes un maven débutant, mais je suggère d'essayer de l'utiliser au lieu de revenir à la fourmi ou que vous n'obtiendrez pas les avantages. En outre, lors de l'ouverture d'une question, au lieu de demander une solution spécifique, vous devez plutôt expliquer votre problème général, vous obtiendrez de meilleures réponses. Ici, je ne peux pas fournir plus de conseils car je ne sais pas ce que vous essayez vraiment de réaliser. p> p> Quoi qu'il en soit, comme vous avez explicitement mentionné Maven 1, je vais essayer de répondre. Si je me souviens bien, j'écrirais un objectif personnalisé et utilisez Jelly's noyau: si code>
ou noyau: quand code >
. Pour ce faire, donnez quelque chose comme celui-ci dans maven.xml code>: grève> p>
si code >
tâche comme indiqué ci-dessous: p> mvn compile -dfoo = bar code> (ceci est juste un exemple). P>
Toutes mes excuses, assez neuves à Maven. J'utilise Maven 2.0.9 avec JDK 1.4.
Pas de problème, cela a plus de sens. Je vais mettre à jour ma réponse en conséquence.
Merci pour votre aide Pascal. Votre solution ci-dessus ressemble exactement à ce que j'essayais d'être atteint. Je ne pouvais pas obtenir les déclarations «si» travaillant auparavant, comme je ne savais pas que je devais inclure une ressource anti-contrib. Essentiellement ce que j'essaie d'atteindre consiste à créer une structure de répertoire sur un serveur d'applications qui diffère selon que je déploie dans un environnement de développement / test ou à un environnement de production. Je viens de regarder rapidement les profils de construction et cela ressemble à ce que ce soit une meilleure façon de faire des choses. Merci!
résolu ce problème en créant plusieurs cibles nommées avec des attributs "si" et une propriété de condition dans un fichier build.xml dans la racine du projet comme suit.
P>
p>
p>
p> Propriétés transmises des commutateurs de ligne de commande I requis et appelé les cibles de fourmis dans le fichier build.xml Dans la section Tâches dans le Maven Pom comme suit: P> <tasks>
<ant antfile="${basedir}/build.xml">
<property name="environment" value="${environment}"/>
<target name="prod"/>
</ant>
</tasks>
Aucune infraction, mais c'est un moyen horrible d'utiliser Maven pour résoudre votre problème.
Pourquoi avez-vous besoin d'appeler une cible spécifique et que de vérifier si vous avez appelé la bonne cible? Vous ne pouvez pas simplement appeler la cible appropriée de Maven en fonction de l'environnement (par exemple, appelé en fonction des noms d'environnement)?
Vous n'avez pas besoin d'utiliser antcontrib code> après
Maven-antrun-plugin 1.5 code> qui utilise
Code> Selon Utilisation du plug-in . Cette balise fonctionne de la même manière que, mais dans celle-ci, vous pouvez ajouter des conditions telles que l'exemple ci-dessous.
<properties>
<execute.my.target>true</execute.my.target>
</properties>
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>config</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<!-- this target will be executed always -->
<target>
<echo message="Hello there, I'm a simple target" />
</target>
<!--
This target will be executed if and only if
the property is set to true
-->
<target name="my-target" if="execute.my.target">
<echo message="Conditional target..." />
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
...
</build>
Merci ! "My-Target" est exécuté uniquement si "Execute.My.Target" est défini et est égal à "True", "On" ou "Oui".
Ne fonctionne pas dans 1.8. Si je mettez deux cible code> dans
Que diriez-vous s'il est égal à une valeur ??
Comme @Dherik a dit, ne fonctionne pas avec plusieurs cibles sous
Exemple roulant ici ici https://www.surasint.com / RUN-ANT-AVEC-IF-OF-Maven /
Une autre solution serait la suivante: Gardez la fourmis de fourmis-1.0b3.jar à un chemin, puis définissez-la comme ceci P>
<target name="doSomething"> <if> <equals arg1="${someProp}" arg2="YES" /> <then> <echo message="It is YES" /> </then> <else> <echo message="It is not YES" /> </else> </if> </target>
Pouvez-vous simplement confirmer comment vous appelez Maven et passez le paramètre?
Est-ce que je le vois correctement, que la 2e tâche n'a pas de nom?