run - Maven: ¿Cómo desempaquetar archivos precisos de artefactos en el mismo directorio de salida?
how to run maven assembly plugin (3)
Tengo varios artefactos del mismo ID de grupo ( org.webjars
), y necesito descomprimirlos, y luego copiar todos los archivos js contenidos en el mismo directorio.
Los archivos de artefactos tienen una jerarquía (comprimida como un frasco) de la siguiente manera:
artifact1
- resources
- webjars
- ...
- sample-1.js
- sample-2.js
Necesito al final que todos los archivos js se copien en el mismo directorio sin su jerarquía, de la siguiente manera:
outputDirectory
- sample-1.js
- sample-2.js
- ...
- sample-n.js
El resultado que puedo alcanzar es el siguiente:
outputDirectory
- artifact-1
- resources
- webjars
- ...
- sample-1.js
- sample-2.js
- ...
- artifact-m
- resources
- webjars
- ...
- sample-n.js
Para este propósito, utilicé el maven-dependency-plugin
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack org.webjars dependencies</id>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>org.webjars</includeGroupIds>
<includes>**/*.js</includes>
<outputDirectory>${project.build.directory}/static</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
¿Hay una opción mágica de este complemento para hacer esto, o debo necesitar otro complemento para completar el trabajo?
EDITAR: Aquí está la solución que finalmente usé:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>copy org.webjars dependency to jar</id>
<phase>package</phase>
<goals><goal>run</goal></goals>
<configuration>
<target>
<copy todir="${project.build.directory}/classes/static" flatten="true">
<fileset dir="${project.build.directory}/static">
<include name="**/*.js"/>
</fileset>
</copy>
</target>
</configuration>
</execution>
</executions>
</plugin>
<!-- Force the generation of the jar to be done after the javascript dependencies have been copied.
Note : This is a half solution, as the jar is generated twice: a first time before the javascript get copied, and
another one after. As a result, there is the correct jar, but after two creations... -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>Force the jar-plugin to be called after the javascripts dependencies have been copied to be embedded</id>
<phase>package</phase>
<goals><goal>jar</goal></goals>
</execution>
</executions>
</plugin>
Acabo de encontrar un problema similar, y (dado que no soy un gran fanático de la ejecución de Ant Antiquated dentro de Maven, hoy en día) terminé usando org.apache.portals.jetspeed-2:jetspeed-unpack-maven-plugin (mvnrepository link here ). En su configuración <resource> puede especificar una opción <flat> true </flat> que aplanará la estructura del directorio como se desee.
Es posible que pueda acercarse un poco más con <useSubDirectoryPerArtifact>false</useSubDirectoryPerArtifact>
. Pero creo que el objetivo de unpack-dependencies
todavía incluirá la ruta completa de los archivos de los artefactos que desempaqueta.
Puede usar el complemento maven antrun utilizando la tarea de copia con la opción de aplanar como se describe en el siguiente hilo: Maven: copie los archivos sin la estructura del subdirectorio
Mejor