Requerir Recopilación JS en proyecto Maven con dependencias JS externas

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 también podría aplicarse a cualquier compilador / minificador).

Tengo una configuración que funciona, pero necesita mejoras:

Empaqué las bibliotecas de JavaScript de terceros y se están descargando como dependencias y luego se agregaron con el complemento WAR Overlay.

Tengo una tarea de complemento Exec que ejecuta el compilador RequireJSdentro del objetivo directorio. Actualmente ejecuto manualmenteexec:exec después de que se ejecute el destino del paquete (y, por lo tanto, el contenido de WAR se coloca 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 compilador JS en sí (Requiere JS) se descarga como una dependencia durante la fase de superposición WAR que ocurre después de la compilación. Entonces, necesito que se descarguen y desempaqueten los archivos Requerir JS y necesito ejecutar la compilación JS usando esos archivos, antes / durante / después de la compilación Java.

Estoy seguro de que podría haber varias formas de lograr esto. Estoy buscando la solución más elegante.

Actualización: fragmentos de POM existentes

Tengo dependencias de JavaScript que he comprimido y agregado a nuestro administrador de repositorios:

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

Tenga 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 poder comenzar con la compilación RequireJS.

Estas dependencias se agregan a WAR mediante el complemento WAR Overlay:

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

Aunque no necesitorequirejs/build/** para terminar en WAR, lo incluyo como parte de la superposición para obtener los scripts de compilación RequireJS descomprimidos, simplemente porque no he descubierto 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 agregado al flujo de trabajo de compilación normal: tengo que invocarla manualmente conmvn exec:exec después El embalaje WAR está hecho:

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

Entonces, algunas preguntas son:

¿Cómo puedo extraer diferentes porciones de una sola dependencia comprimida para los pasos de compilación y empaquetado WAR? ¿O tengo que crear dos archivos zip, uno con solo el material de tiempo de ejecución y el otro para los scripts de compilación?Me gustaría activarexec:exec idealmente durante la compilación, o si no, justo antes del empaque WAR. ¿Cómo puedo hacer eso?

De hecho, he intentado un montón de cosas sin éxito, así que espero no aparecer como perezosamente publicando una gran cantidad de código y esperando respuestas :) Es solo que no he entendido bien cómo Maven apunta / fases etc trabajo aún.

Respuestas a la pregunta(3)

Su respuesta a la pregunta