Tengo un proyecto web creado con Maven y estoy tratando de encontrar la mejor manera de compilar los archivos JavaScript con el compilador RequireJS (esta pregunta podría aplicarse a cualquier compilador/minificador también).Recopilación RequireJS en el proyecto Maven con dependencias JS externas
que tienen una configuración que funciona, pero necesita mejoras:
He envasados, las bibliotecas de JavaScript de 3 ª parte y se descargan como dependencias y luego agregó con el plugin GUERRA superposición.
Tengo una tarea de complemento Exec que ejecuta el compilador RequireJS dentro del directorio de destino. Actualmente, ejecuto manualmente exec:exec
después de que se ejecute el destino del paquete (y, por lo tanto, los contenidos de WAR se colocan en el directorio de destino).
Lo que me gustaría en cambio es hacer que la compilación JS sea parte de la compilación principal (Java). El propio compilador JS (Require JS) se descarga como una dependencia durante la fase de superposición WAR que ocurre después de la compilación. Entonces, necesito que los archivos Require JS se descarguen y desempaqueten y necesito ejecutar la compilación JS usando esos archivos, antes/durante/después de la compilación de Java.
Estoy seguro de que podría haber varias formas de lograrlo. Estoy buscando la solución más elegante.
Actualizar: Existente fragmentos POM
tengo dependencias de JavaScript que he comprimido y añadido a nuestro gestor de repositorio:
<dependency>
<groupId>org.requirejs</groupId>
<artifactId>requirejs</artifactId>
<version>0.22.0</version>
<classifier>repackaged</classifier>
<type>zip</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.jqueryui</groupId>
<artifactId>jquery-ui</artifactId>
<version>1.8.7</version>
<classifier>repackaged</classifier>
<type>zip</type>
<scope>runtime</scope>
</dependency>
tomar en cuenta que RequireJS en sí (que se requiere para la compilación del resto de bibliotecas) también se carga como una dependencia externa. Entonces, lo primero es que necesito que esta dependencia se descargue y descomprima antes de que pueda comenzar con la compilación RequireJS.
Estas dependencias se añaden a la guerra usando el plugin GUERRA Superposición:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<overlays>
<overlay>
<groupId>org.requirejs</groupId>
<artifactId>requirejs</artifactId>
<classifier>repackaged</classifier>
<type>zip</type>
<targetPath>lib</targetPath>
<includes>
<include>requirejs/require.js</include>
<include>requirejs/require/*</include>
<include>requirejs/build/**</include>
</includes>
</overlay>
<overlay>
<groupId>com.jqueryui</groupId>
<artifactId>jquery-ui</artifactId>
<classifier>repackaged</classifier>
<type>zip</type>
<targetPath>lib</targetPath>
</overlay>
</overlays>
</configuration>
</plugin>
A pesar de que no necesito requirejs/build/**
a terminar en la guerra, estoy incluyéndolo como parte de la superposición para obtener los scripts de compilación RequireJS descomprimidos, simplemente porque no he encontrado una mejor manera.
Luego tengo una tarea de complemento Exec que realiza la compilación. Pero tenga en cuenta que esta tarea no se ha añadido al flujo normal de trabajo de compilación: tengo que invocar manualmente con mvn exec:exec
después se realiza el embalaje GUERRA:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>lib/requirejs/build/build.bat</executable>
<workingDirectory>${project.build.directory}/${project.artifactId}</workingDirectory>
<arguments>
<argument>name=bootstrap</argument>
<argument>out=combined.js</argument>
<argument>baseUrl=scripts</argument>
<argument>optimize=closure</argument>
<argument>excludeShallow=plugins/manifest</argument>
</arguments>
</configuration>
</plugin>
Así, algunas preguntas son:
- ¿Cómo puedo extraer diferentes porciones de una única dependencia comprimida para los pasos de compilación y empaquetado WAR? ¿O tengo que crear dos archivos zip, uno con el material de tiempo de ejecución y el otro para los scripts de compilación?
- Me gustaría disparar
exec:exec
idealmente durante la compilación, o si no, justo antes del embalaje de WAR. ¿Cómo puedo hacer eso?
En realidad, he intentado un montón de cosas sin éxito, así que espero no aparecer como perezosamente publicar un gran trozo de código y esperar respuestas :) Es solo que no me he arrepentido cómo funcionan los objetivos/fases de Maven, etc.
¿Tal vez podría publicar el fragmento de pom relevante? – Raghuram
@ Raghuram: Listo. –