2010-08-16 21 views
62

Quiero ejecutar comandos de shell de Linux con Maven. Esto es lo que he intentado:Quiero ejecutar comandos de shell desde pom.xml de Maven

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.1.1</version> 
    <executions> 
    <execution> 
     <goals> 
     <goal>exec</goal> 
     </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <executable>hostname</executable> 
    </configuration> 
</plugin> 
+0

por favor, limpie su pregunta y formatee el pom.xml en su pregunta. No es legible – zengr

+9

No quiero ser grosero pero realmente necesitas aprender a hacer preguntas, no somos psíquicos. ¿Qué hiciste? ¿Qué obtuviste? ¿Cuál es el resultado esperado? –

Respuesta

109

Esto es lo que ha estado trabajando para mí:

<plugin> 
    <artifactId>exec-maven-plugin</artifactId> 
    <groupId>org.codehaus.mojo</groupId> 
    <executions> 
    <execution><!-- Run our version calculation script --> 
     <id>Version Calculation</id> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>exec</goal> 
     </goals> 
     <configuration> 
     <executable>${basedir}/scripts/calculate-version.sh</executable> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

+6

Me gustaría añadir que esto no funciona con (al menos) la versión 1.5.0 del complemento, ya que '' debe seguir después de '' y no debe colocarse allí. Me llevó bastante tiempo encontrar este simple error sintáctico. La salida de error de Maven realmente no es tan útil. – joergl

+1

¿Qué fase u objetivo necesitamos proporcionar si queremos ejecutar el script después de la fase de implementación? – Lucy

+0

¿Funciona esto en Windows? –

29

El problema aquí es que no sé lo que es espera. Con la configuración actual, invocando el plugin en la línea de comandos sería sólo el trabajo:

 
$ mvn exec:exec 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Q3491937 
[INFO] task-segment: [exec:exec] 
[INFO] ------------------------------------------------------------------------ 
[INFO] [exec:exec {execution: default-cli}] 
[INFO] laptop 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
... 

El mundial configuration se utiliza, se ejecuta el comando hostname (laptop es mi nombre de host). En otras palabras, el complemento funciona como se esperaba.

Ahora, si quieres un plugin para obtener ejecutado como parte de la construcción, usted tiene que unen un gol en una fase específica. Por ejemplo, para obligar a éste en compile:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.1.1</version> 
    <executions> 
     <execution> 
     <id>some-execution</id> 
     <phase>compile</phase> 
     <goals> 
      <goal>exec</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <executable>hostname</executable> 
    </configuration> 
    </plugin> 

Y luego:

 
$ mvn compile 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Q3491937 
[INFO] task-segment: [compile] 
[INFO] ------------------------------------------------------------------------ 
[INFO] [resources:resources {execution: default-resources}] 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] skip non existing resourceDirectory /home/pascal/Projects/Q3491937/src/main/resources 
[INFO] [compiler:compile {execution: default-compile}] 
[INFO] Nothing to compile - all classes are up to date 
[INFO] [exec:exec {execution: some-execution}] 
[INFO] laptop 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
... 

Tenga en cuenta que puede especificar un configuration dentro de un execution.

+0

[ERROR] BUILD ERROR [INFO] -------------------- -------------------------------------------------- - [INFO] Una o más exigidas parámetros del plugin no son válidos/falta de 'exec: exec' [0] Dentro de la definición para plugin "exec-maven-plugin especifique lo siguiente: . .. VALOR -O- en la línea de comandos, especifique: '-Dexec.executable = valor' consigo este error ahora. – NareshKumar

+2

@ gnash-85: todavía no tengo idea de lo que estás haciendo.Utilicé el fragmento exacto ** que ** proporcionó y no tuve ningún problema, como se muestra arriba. Actualiza tu pregunta para mostrar cómo invocas a maven (y cuál es tu configuración actual si cambiaste algo). –

+0

He puesto el mismo código en un módulo secundario. Y estoy tratando de ejecutar el mvn exec: exec del padre pom.xml. Y obtengo este error. Pero cuando lo ejecuto individualmente, está funcionando. – NareshKumar

2

Resuelto. El problema es que el ejecutable está funcionando de una manera diferente en Linux. Si desea ejecutar el archivo .sh, debe escribir de la siguiente manera. Escríbalo en pom.xml

<plugin> 
     <artifactId>exec-maven-plugin</artifactId> 
    <version>1.6.0</version> 
     <groupId>org.codehaus.mojo</groupId> 
     <executions> 
      <execution><!-- Run our version calculation script --> 
       <id>Renaming build artifacts</id> 
       <phase>package</phase> 
       <goals> 
        <goal>exec</goal> 
       </goals> 
       <configuration> 
        <executable>bash</executable> 
      <commandlineArgs>handleResultJars.sh</commandlineArgs> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
Cuestiones relacionadas