2010-06-04 14 views
7

Estoy usando Maven en la línea de comandos, y mi construcción tarda un tiempo en completarse (1-2min). Estoy buscando la posibilidad de engancharme en el FINAL de la compilación y activar un comando específico (iniciar un programa por hormiga, etc.) cuando la compilación finaliza, dependiendo del resultado de mi compilación (Correcto/Fallido).Maven: dispara el comando personalizado cuando Build finaliza, depende del resultado (exitoso/fallido)

Mi objetivo es que mi computadora solo reproduzca un sonido (uno para compilación exitosa, otro para compilación fallida), así que notare que mi compilación está lista.

¿Puedo darme cuenta de eso y cómo? Supongo que Ant sería una posibilidad, pero espero que también pueda hacerlo sin Ant.

Respuesta

8

Esto debería comenzar.

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

Querrá este repositorio de Maven.

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

Me imagino que, como la mayoría de las buenas herramientas de línea de comandos, the exit code devuelto desde mvn cuando termina refleja si la compilación fue exitosa o no. En otras palabras, mvn devuelve un 1 cuando la compilación es exitosa y un 0 cuando falla (tendrá que buscar los detalles para estar seguro).

Si esto es así, puede escribir un script por lotes de encargo/cáscara que envuelve solamente el comando mvn, pasando los argumentos al comando recibido mvn (para que pueda ejecutar mymvn compilemymvn clean deploy site y con la misma facilidad).

Su script de contenedor personalizado puede invocar el comando que sea necesario para reproducir un sonido basado en el código de retorno mvn.

+1

Código de salida es una buena idea, y de acuerdo con el Maven 'Invoker' docs (http://maven.apache.org/shared/maven-invoker/usage.html), Maven es de hecho bien comportado de esta manera. –

+1

Un buen enfoque, pero tenga en cuenta que un 0 es realmente el código de retorno para la terminación correcta, cualquier cosa que no sea cero indica un error http://en.wikipedia.org/wiki/Exit_status Actualice su respuesta en consecuencia. –

1

¡Gracias por los impulsos que hacen reflexionar! Como estoy en Windows, me di cuenta con una secuencia de comandos por lotes, que llama a un pequeño programa de Java. Este programa desencadena una acción (que muestra un gran JPanel verde/rojo, reproduciendo un sonido) según el ErrorLevel dado.

En lugar de llamar mvn compile etc., tiene la palabra m compile

m.bat:

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

funciona perfecto. ¡Ahora ya no tengo que mirar la consola para ver si mi construcción está lista!

5

Aquí hay un pequeño script (para Windows) que parte del uso de nuestro desarrollador simplemente cambia el color bg del indicador cmd, utilizando nuevamente el código de salida.

@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

Característica interesante ... – Mike

Cuestiones relacionadas