Quiero ejecutar comandos de shell desde pom.xml de Maven

Quiero ejecutar comandos de shell de Linux con Maven. Esto es lo que intenté:

 org.codehaus.mojo exec-maven-plugin 1.1.1    exec     hostname   

Esto es lo que ha estado funcionando para mí:

  exec-maven-plugin org.codehaus.mojo   Version Calculation generate-sources  exec   ${basedir}/scripts/calculate-version.sh     

El problema aquí es que no sé lo que se espera . Con su configuración actual, invocar el complemento en la línea de comando simplemente funcionaría:

 $ mvn exec: exec
 [INFO] Escaneo de proyectos ...
 [INFO] ----------------------------------------------- -------------------------
 [INFO] Edificio Q3491937
 [INFO] segmento de tareas: [exec: exec]
 [INFO] ----------------------------------------------- -------------------------
 [INFO] [exec: exec {execution: default-cli}]
 [INFO] laptop
 [INFO] ----------------------------------------------- -------------------------
 [INFO] CONSTRUIR EXITOSO
 [INFO] ----------------------------------------------- -------------------------
 ...

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

Ahora, si desea que un complemento se ejecute como parte de la comstackción , debe vincular un objective en una fase específica. Por ejemplo, para enlazarlo en compile :

   org.codehaus.mojo exec-maven-plugin 1.1.1   some-execution compile  exec     hostname   

Y entonces:

 $ mvn comstackr
 [INFO] Escaneo de proyectos ...
 [INFO] ----------------------------------------------- -------------------------
 [INFO] Edificio Q3491937
 [INFO] segmento de tareas: [comstackr]
 [INFO] ----------------------------------------------- -------------------------
 [INFO] [recursos: recursos {ejecución: recursos predeterminados}]
 [INFO] Utilizando la encoding 'UTF-8' para copiar los recursos filtrados.
 [INFO] omitir resourceDirectory / home / pascal / Projects / Q3491937 / src / main / resources no existente
 [INFO] [comstackdor: comstackr {ejecución: comstackción predeterminada}]
 [INFO] Nada para comstackr: todas las clases están actualizadas
 [INFO] [exec: exec {execution: some-execution}]
 [INFO] laptop
 [INFO] ----------------------------------------------- -------------------------
 [INFO] CONSTRUIR EXITOSO
 [INFO] ----------------------------------------------- -------------------------
 ...

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

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íbelo en pom.xml

   exec-maven-plugin 1.6.0 org.codehaus.mojo   Renaming build artifacts package  exec   bash handleResultJars.sh     

2 Opciones:

  1. Desea ejecutar un comando desde maven sin vincularlo a ninguna fase, simplemente escriba el comando y maven lo ejecuta , solo quiere maven ejecutar algo, no importa si estamos en compile / package / … Vamos a digamos que quiero ejecutar npm start con maven, puedes lograrlo con lo siguiente:

mvn exec:exec -Pstart-node

Para eso necesitas la siguiente sección maven

    start-node    org.codehaus.mojo exec-maven-plugin 1.3.2    exec     npm start       
  1. Desea ejecutar un comando arbitrario desde maven mientras se encuentra en una fase específica ; por ejemplo, cuando estoy en la fase de instalación. Deseo ejecutar la npm install puede hacerlo con:

mvn install

Y para que funcione, necesitarías la siguiente sección:

   org.codehaus.mojo exec-maven-plugin 1.3.2   npm install (initialize)  exec  initialize  npm  install