2016-08-03 2 views
1

J'ai le plugin suivante pour exécuter un script .sh:plug-in exec Maven: code de sortie

<plugin> 
    <artifactId>exec-maven-plugin</artifactId> 
    <groupId>org.codehaus.mojo</groupId> 
    <executions> 
    <execution> 
     <id>deploy-bundles</id> 
     <phase>install</phase> 
     <goals> 
     <goal>exec</goal> 
     </goals> 
     <configuration> 
     <executable>${basedir}/deploy.sh</executable> 
     <successCodes> 
      <successCode>0</successCode> <-- Not working 
     </successCodes> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

qui copie des dossiers et fichiers à certains endroits. Ça marche. Cependant, juste au cas où, je veux avoir un mécanisme d'échec sur erreur. J'ai déjà la commande set -e dans mon script .sh, mais je veux aussi une solution maven. J'ai entendu qu'il y a un tag appelé successCodes, j'essaie de l'incorporer. Mais pas de chance jusqu'à présent. Quelqu'un pourrait-il indiquer la bonne façon de le faire?

Edit: Mon script .sh ressemble à ceci:

cp ../template/config.properties $component/conf 
cp ../../runtime/group1/group1.mw/conf/log4j.xml $component/conf 
# if the component is planning, create an additional folder called plans 
if [[ $component == *".planning"* ]] 
then 
mkdir -p $component/plans 
    # copy all the plans here 
    cp ../../mission.planning/plans/* $component/plans 
fi 

où il est prévu à l'échec dans le cas où ces dossiers/fichiers ne sont pas là. Donc, en tant que test, je modifie manuellement les chemins ci-dessus et j'attends qu'il échoue. Il échoue le processus d'exécution et me dit l'erreur (puisque j'ai la commande set -e dans le script .sh), cependant les rapports de maven sont comme "succès".

Répondre

2

Ce n'est pas un problème avec le plugin Exec Maven, mais un problème avec la gestion des codes de sortie dans le script Shell.

Le paramètre successCodes est utile dans la situation où un exécutable a un code de sortie différent de 0 pour « exécution réussie »:

codes de sortie à résoudre en bonne exécution pour les applications non conformes (applications non retour 0 pour le succès).

The default behaviour est de considérer le code de sortie 0 en exécution réussie, et tous les autres comme un échec, et le plug-in échouera la construction dans ce cas. Dans votre script Shell, vous avez plusieurs commandes, each of which has its own exit code. Sans manipulation supplémentaire, le code de sortie du script lui-même, dans son ensemble, est le code de sortie de la dernière commande. Par conséquent, même si une commande a échoué (son code de sortie n'est pas égal à zéro), une commande réussie après réinitialisera le code de sortie du script à 0. Vous pouvez tester cela en invoquant le script sur la ligne de commande en dehors de Maven et écho la variable $?, which contains the exit code. En tant que tel, vous devez tester le code de sortie de chaque commande invoquée pouvant échouer dans votre Shell. (Vous pouvez également utiliser a bit of arithmetic pour accumuler chaque code de sortie.)

+0

Une réponse parfaite, merci. –