Exécuter plusieurs projets maven à partir du fichier MS bat?

je dois construire 3 projets maven indépendants en utilisant un build.fichier bat (en raison de l'agrégation tycho n'est pas une option - Voir les commentaires sur la réponse de romaintaz). J'ai essayé (exécuté à partir du dossier de création - voir ci-dessous):

cd ../projectA
mvn clean install -U
cd ..
cd ../projectB
mvn clean install -U
cd ..
cd ../projectC
mvn clean install -U

où la structure des dossiers des projets est:

build
  |--> build.bat

projectA
  |--> pom.xml

projectB
  |--> pom.xml

projectC
  |--> pom.xml
24
demandé sur Jan 2011-05-26 00:12:40
la source

7 ответов

call commande pour exécuter vos processus mvn, comme:

call mvn clean install -U

Voir

help call

pour plus d'explications sur la commande call.

Pour éviter d'avoir tous ces cd vous pouvez aussi utiliser les commandes -f option pour spécifier le chemin de votre pom, par exemple

call mvn -f <path>/projectA/pom.xml clean install -U
call mvn -f <path>/projectB/pom.xml clean install -U
call mvn -f <path>/projectC/pom.xml clean install -U
47
répondu FrVaBe 2011-05-26 20:16:17
la source

Comme indiqué ci-dessus, vous devez utiliser un "appel" pour exécuter mvn script:

call mvn package

afin de repérer les erreurs, vous devez utiliser le ERROR_LEVEL variable:

call mvn clean
echo Exit Code = %ERRORLEVEL%
if not "%ERRORLEVEL%" == "0" exit /b

http://jojovedder.blogspot.com/2009/03/executing-multiple-mvn-commands-from.html pour de plus amples commentaires.

7
répondu Martin Modrák 2012-03-15 12:31:40
la source

Pourquoi ne pas essayer de créer un agrégation projet parent?

Tu semble avoir la structure suivante:

someDirectory
  +- projectA
      +- pom.xml
  +- projectB
      +- pom.xml
  +- projectC
      +- pom.xml

il suffit de créer un pom.xml dans le répertoire racine (someDirectory dans mon exemple), et de définir la liste des modules, qui sont le projectA,projectB et projectC. Ce pom ressemblera à:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>my.company</groupId>
    <artifactId>my-aggregation-project</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <modules>
        <module>projectA</module>
        <module>projectB</module>
        <module>projectC</module>
    </modules>
</project>

notes:

  • N'oubliez pas de mettre le <packaging>pom</packaging>, car ce N'est pas un "vrai" Java projet.
  • Le nom d'un module doit correspondre au nom du répertoire où le sous-module est hébergé.

Maintenant, en faisant cela, lorsque vous exécutez une commande Maven sur le répertoire racine, Maven va automatiquement exécuter cette commande sur tous les modules. Donc, si vous venez run mvn clean install dans le répertoire racine, cette commande sera exécutée dans vos trois modules.

remarque Importante: je parle ici de l' agrégation fonctionnalité de Maven. héritage. Cela signifie qu'il n'est pas nécessaire que chaque module ait le projet racine comme parent.

3
répondu romaintaz 2011-05-26 11:09:19
la source

utilisez 'call' lorsque vous voulez invoquer un autre fichier batch dans le Fichier parent ,de sorte que le contrôle sera retourné au fichier batch parent et qu'il continuera l'exécution.

e. G call mvn clean install

1
répondu saurav 2013-06-27 13:54:42
la source

je pense que l'utilisation de %ERRORLEVEL% complétera +la réponse de FrVaBe. Originaire de Kunal

 call mvn -f ProjectA\pom.xml clean install  if not "%ERRORLEVEL%" == "0" goto error

 call mvn -DskipTests=true -f ProjectC\pom.xml clean install if not "%ERRORLEVEL%" == "0" goto error

 exit

 :error @echo Build Failed pause
1
répondu Olga 2013-08-07 13:04:39
la source

puisque vos projets sont au même niveau de répertoire, vous ne devriez pas naviguer deux fois. Vous allez à l'aide de cd .. et puis, vous allez monter d'un niveau pour entrer dans le prochain projet en faisant cd ../projectX.

supprimer cd ..'s entre les deux, ou changer le cd dans le dossier de votre projet en cd ./projectX (répertoire courant au lieu du répertoire parent)

au fait, Avez-vous vraiment besoin d'utiliser un fichier bat pour cela? Avez-vous envisagé une pom multimodule?

0
répondu wjans 2011-05-26 10:57:28
la source

FrVaBe avait répondu très bien. Si vous souhaitez conserver votre structure de code, la solution serait:

cd ../projectA
call mvn clean install -U
echo Do some stuff with artifacts
cd ..
cd ../projectB
call mvn clean install -U
echo Do some stuff with artifacts
cd ..
cd ../projectC
call mvn clean install -U
echo Do some stuff with artifacts

Ici, le plus important est appel fonction qui est utilisée pour exécuter Maven build comme une sorte de sous-programme, qui se termine dans votre fichier bat et ne sort pas complètement.

0
répondu Seweryn Habdank-Wojewódzki 2016-09-28 16:48:16
la source

Autres questions sur