¿Es posible aislar todo el código javascript de nuestra aplicación web en un proyecto a parte?
Si, lo es. Con javascript-maven-tools, en concreto con javascript-maven-plugin. Este plugin nos permite tratar con proyectos de tipo javascript, es decir, esto sería válido:
...
<dependencies>
...
<dependency>
<gruopId>example.javascript</groupId>
<artifactId>my-javascript</artifactId>
<version>1.0.0</version>
<type>javascript</type>
</dependency>
...
</dependencies>
...
Este plugin habilita el uso del tipo “javascript” en nuestras dependencias. Sólo debemos configurarlo:
<build>
<plugin>
<groupId>org.codehaus.mojo.javascript</groupId>
<artifactId>javascript-maven-plugin</artifactId>
<version>1.0-alpha-1-SNAPSHOT</version>
<extensions>true</extensions>
<executions>
<execution>
<id>js-copy-deps</id>
<goals>
<goal>war-package</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
</build>
¿Y el artefacto javascript, cómo se crea?
Pues definiendo un proyecto maven de tipo “javascript”. Es decir, el “packaging” será de tipo “javascript” en el POM:
<packaging>javascript</packaging>
Y definiremos la siguiente extensión:
...
<build>
<extensions>
<extension>
<groupId>org.codehaus.mojo.javascript</groupId>
<artifactId>javascript-maven-plugin</artifactId>
<version>1.0-alpha-1-SNAPSHOT</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.codehaus.mojo.javascript</groupId>
<artifactId>javascript-maven-plugin</artifactId>
<version>1.0-alpha-1-SNAPSHOT</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
...
Maven tratará nuestro proyecto como un projecto más, y tenemos a nuestra disposición toda la potencia de la gestión de dependencias de Maven.
Para configurar el comportamiento del plugin debemos indicarle un proporcionar un par de parámetros, basta con incluir las propiedades en el POM:
<properties>
<scripts>public/scripts</scripts>
<lib></lib>
<useArtifactId>true</useArtifactId>
</properties>
Eso es todo. Solo un detalle más, el plugin tiene algunos bugs, he reportado un parche a sus desarrolladores, aún no lo han incluido en la versión actual. Siempre podemos descargar el código y parchearlo nosotros mismos ;)

