2016-08-03 14 views
1

ich folgendes Plugin habe ein .sh Skript auszuführen:exec Maven Plugin: Exit-Code

<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> 

die Kopien einige Ordner und Dateien an bestimmten Orten. Es klappt. Aber nur für den Fall, ich möchte einen Fehler-Fehler-Mechanismus haben. Ich habe bereits set -e Befehl in meinem .sh Skript, aber ich möchte auch eine Maven-Lösung. Ich habe gehört, dass es eine tag namens successCodes, ich versuche, es zu integrieren. Aber bisher kein Glück. Könnte jemand auf die richtige Art und Weise hinweisen?

Edit: Mein .sh Skript sieht wie folgt aus:

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 

wo es erwartet wird, falls nicht diese Ordner/Dateien sind nicht da. Als Test ändere ich manuell die obigen Pfade und erwarte, dass sie fehlschlägt. Es schlägt den Ausführungsprozess fehl und sagt mir den Fehler (seit ich set -e Befehl in .sh Skript habe), aber maven Berichte ist als "Erfolg".

Antwort

2

Das ist kein Problem mit dem Exec Maven Plugin, aber ein Problem mit der Behandlung von Exit-Codes im Shell-Skript.

Der successCodes Parameter ist in Situation nützlich, wenn eine ausführbare Datei einen Exit-Code anders als 0 für „erfolgreiche Ausführung“ hat:

Exit-Codes für nicht-konforme Anwendungen (Applikationen als erfolgreiche Ausführung gelöst wird nicht zurückkehren 0 für den Erfolg).

The default behaviour ist der Exit-Code 0 als erfolgreicher Ausführung zu betrachten, und alle anderen als Versager, und das Plugin den Build in diesem Fall fehlschlagen. In Ihrem Shell-Skript haben Sie mehrere Befehle: each of which has its own exit code. Ohne zusätzliche Behandlung ist der Exit-Code des Skripts selbst der Exit-Code des letzten Befehls. Selbst wenn einer der Befehle fehlschlägt (der Exit-Code ist also nicht Null), setzt ein erfolgreicher Befehl danach den Skript-Exit-Code auf 0 zurück. Sie können dies testen, indem Sie das Skript in der Befehlszeile außerhalb von Maven und echo aufrufen die Variable $?, which contains the exit code.

Als solche müssen Sie den Exit-Code jedes aufgerufenen Befehls testen, der in Ihrer Shell fehlschlagen könnte. (Sie können auch a bit of arithmetic verwenden, um jeden Ausgangscode zu akkumulieren.)

+0

Eine perfekte Antwort, danke. –