script español ammonite shell maven batch-file pom.xml exec-maven-plugin

shell - español - Maven llama script externo en plataformas Linux y Windows



scala ammonite (2)

Finalmente, mezclé las ideas => los <profiles> se usan para establecer una variable interna script.extension dependiendo del sistema operativo:

<profiles> <profile> <id>Windows</id> <activation> <os> <family>Windows</family> </os> </activation> <properties> <script.extension>.bat</script.extension> </properties> </profile> <profile> <id>unix</id> <activation> <os> <family>unix</family> </os> </activation> <properties> <script.extension>.sh</script.extension> </properties> </profile> </profiles>

Luego uso la variable para completar el nombre de archivo del script:

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <id>compile-jni</id> <phase>compile</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>./compile-jni${script.extension}</executable> </configuration> </execution> </executions> </plugin>


⚠ Como señaló Maksim para Maven 3.5.4, suba la sección <configuration> como se muestra a continuación:

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <configuration> <executable>./compile-jni${script.extension}</executable> </configuration> <version>1.2.1</version> <executions> <execution> <id>compile-jni</id> <phase>compile</phase> <goals> <goal>exec</goal> </goals> </execution> </executions> </plugin>

He movido el directorio de trabajo desde el pom.xml al script de shell. Con el fin de simplificar el mantenimiento, las cosas comunes se mueven dentro de este shell script. Por lo tanto, el archivo por lotes usa este script de shell:

compile-jni.bat :

call "%ProgramFiles(x86)%/Microsoft Visual Studio 10.0/VC/vcvarsall.bat" x86 bash compile-jni.sh

compile-jni.sh :

#!/bin/sh cd src/main/cpp make

Necesito ejecutar un script externo en las plataformas Linux y MS-Windows.

  1. ¿Utilizo el complemento correcto exec-maven-plugin ?
  2. ¿Hay un plugin más adecuado?
  3. ¿Qué nombre de archivo debo poner en <executable>....</executable> ?

    <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <id>compile-jni</id> <phase>compile</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>./compile-jni</executable> <workingDirectory>${basedir}/src/main/cpp</workingDirectory> </configuration> </execution> </executions> </plugin>

Yo uso el mismo Makefile para ambas plataformas Linux / MS-Windows

Mi script compile-jni.bat :

call "%ProgramFiles(x86)%/Microsoft Visual Studio 10.0/VC/vcvarsall.bat" x86 bash -c "make"

Mi script compile-jni.sh :

#!/bin/sh make

ACTUALIZAR:

Dos colegas han sugerido alternativas:

  1. Use una variable script.extension cambiar <executable>./compile-jni${script.extension}</executable> en el pom.xml y agregue la variable dentro de la línea de comandos mvn compile -Dscript.extention=.bat

  2. o configure las variables de entorno de Visual Studio antes de llamar a maven:

    call "C:/%ProgramFiles(x86)%/Microsoft Visual Studio 10.0/VC/vcvarsall.bat" x86 mvn compile #(the same script ''bash -c "make"'' works on both platforms)

Pero en ambas soluciones, los usuarios de Eclipse pueden estar atascados ... Todavía estoy buscando una solución automática y elegante ...


Un ejemplo de ejecutar sh script.

Esto solo hace un chmod para el script sh. Tenga en cuenta que si tiene un script sh, definitivamente debería hacer un chmod antes de realizar otras operaciones, como ejecutar el script real, de modo que teniendo esto como ejemplo, puede hacer la primera <execution> como se muestra a continuación y agregar otra <execution> para ejecutar su script.

Para el archivo por lotes, solo puede tener una <execution> para ejecutar su script

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>${org.codehaus.mojo.version}</version> <executions> <execution> <id>script-chmod</id> <phase>install</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>chmod</executable> <arguments> <argument>+x</argument> <argument>yourscript.sh</argument> </arguments> </configuration> </execution> </executions> </plugin>

y probablemente querrá agregar un perfil según la máquina en la que se encuentre:

<profiles> <profile> <activation> <os> <family>!windows</family> </os> </activation> <plugin> <!-- add your exec-maven-plugin here --> </plugin> ... </profile> </profiles>

Espero que esto sea un comienzo para lo que necesites.