2010-06-04 3 views
7

Ich verwende Maven in der Befehlszeile, und mein Build dauert eine Weile (1-2min) abzuschließen. Ich bin auf der Suche nach einer Möglichkeit, in den END des Builds einhaken und einen bestimmten Befehl (starten Sie ein Programm von Ant, etc.), wenn der Build fertig ist - abhängig von dem Ergebnis meines Build (Erfolgreich/Fehlgeschlagen).Maven: trigger benutzerdefinierten Befehl, wenn Build abgeschlossen ist, abhängig von Ergebnis (erfolgreich/fehlgeschlagen)

Mein Ziel ist, dass mein Computer nur einen Sound (einen für den erfolgreichen Build, einen anderen für einen fehlgeschlagenen Build) spielt, damit ich merke, dass mein Build fertig ist.

Kann ich das erkennen und wie? Ich denke, Ant wäre eine Möglichkeit, aber ich hoffe, ich kann es auch ohne Ant tun.

Antwort

8

Dies sollte Sie beginnen.

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>groovy-maven-plugin</artifactId> 
      <version>1.3</version> 
      <executions> 
       <execution> 
        <phase>install</phase> 
        <goals> 
         <goal>execute</goal> 
        </goals> 
        <configuration> 
         <source> 
          import java.io.File; 
          import javax.sound.sampled.AudioInputStream; 
          import javax.sound.sampled.AudioSystem; 
          import javax.sound.sampled.Clip; 
          import javax.sound.sampled.DataLine; 
          File soundFile = new File("audio/beep.wav"); 
          AudioInputStream sound = AudioSystem.getAudioInputStream(soundFile); 
          DataLine.Info info = new DataLine.Info(Clip.class,sound.getFormat()); 
          Clip clip = (Clip) AudioSystem.getLine(info); 
          clip.open(sound); 
          clip.start(); 
          sleep(5000);       
         </source> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Sie wollen dieses Maven-Repository.

<repository> 
    <id>org.codehaus.repository</id> 
    <name>Codehaus repository</name> 
    <url>http://repo1.maven.org/maven2/org/codehaus/mojo/</url> 
</repository> 
0

Ich könnte mir vorstellen, dass wie die meisten guten Kommandozeilen-Tools, the exit code zurückgegeben von mvn, wenn es endet, reflektiert, ob der Build erfolgreich war oder nicht. Mit anderen Worten, mvn gibt eine 1 zurück, wenn der Build erfolgreich ist, und eine 0, wenn es fehlschlägt (Sie müssen die Details überprüfen, um sicher zu gehen).

Wenn dies so ist, können Sie eine benutzerdefinierte Batch/Shell-Skript schreiben, die lediglich umhüllt den mvn Befehl, alle Argumente zu dem mvn Befehl empfangen vorbei (so können Sie mymvn compile und mymvn clean deploy site genauso gut laufen).

Ihr benutzerdefiniertes Wrapper-Skript kann dann den Befehl aufrufen, der zum Wiedergeben eines Sounds erforderlich ist, basierend auf dem Rückkehrcode von mvn.

+1

Exit-Code ist eine gute Idee, und nach dem Maven 'Invoker' docs (http://maven.apache.org/shared/maven-invoker/usage.html), Maven ist in der Tat gut erzogene diesen Weg. –

+1

Ein guter Ansatz, aber beachten Sie, dass eine 0 ist eigentlich der Return-Code für die korrekte Beendigung, alles andere als Null bezeichnet einen Fehler http://en.wikipedia.org/wiki/Exit_status Bitte aktualisieren Sie Ihre Antwort entsprechend. –

1

Danke für die nachdenklichen Impulse! Da ich unter Windows bin, habe ich es mit einem Batch-Skript realisiert, das ein kleines Java-Programm aufruft. Dieses Programm löst eine Aktion aus (zeigt einen großen grün/roten JPanel, einen Sound zu spielen) entsprechend dem angegebenen ErrorLevel.

Statt mvn compile des Aufrufs usw., ich rufe jetzt m compile

m.bat:

@echo off 
call mvn %* 
start javaw -cp "D:\Workspace\Java\BuildInfo\bin" BuildInfo %ERRORLEVEL% 

perfekt funktioniert. Jetzt muss ich nicht mehr auf die Konsole schauen, um zu sehen, ob mein Build fertig ist!

5

Hier ist ein kleines Skript (für Windows), das einige unserer Entwickler verwenden, das einfach die BG-Farbe der cmd-Eingabe ändert, wiederum unter Verwendung des Exit-Codes.

@echo off 

color 07 

call mvn %* 

IF ERRORLEVEL 1 goto RedBuild 
IF ERRORLEVEL 0 goto GreenBuild 

:RedBuild 
color 4F 
goto TheEnd 

:GreenBuild 
color 2F 

:TheEnd 
+0

Interessante Funktion ... – Mike

Verwandte Themen