web-dev-qa-db-fra.com

Maven: Comment décompresser des fichiers précis d'artefacts dans le même répertoire de sortie?

J'ai plusieurs artefacts du même groupId (org.webjars) et je dois les décompresser, puis copier tous les fichiers js contenus dans le même répertoire.

Les archives d'artefacts ont une hiérarchie (compressée en tant que jar) comme suit:

artifact1
    - resources
        - webjars
            - ...
                - sample-1.js
                - sample-2.js

A la fin, j'ai besoin que chaque fichier js soit copié dans le même répertoire sans sa hiérarchie, comme suit:

outputDirectory
    - sample-1.js
    - sample-2.js
    - ...
    - sample-n.js

Le résultat que je peux atteindre est le suivant:

outputDirectory
    - artifact-1
        - resources
            - webjars
                - ...
                    - sample-1.js
                    - sample-2.js
    - ...
    - artifact-m
        - resources
            - webjars
                - ...
                    - sample-n.js

Pour cela, j'ai utilisé le 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>

Existe-t-il une option magique de ce plugin pour ce faire, ou devrais-je avoir besoin d'un autre plugin pour terminer le travail?

EDIT: Voici la solution que j'ai finalement utilisée:

<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>
17
Rémi Doolaeghe

Vous pouvez utiliser le plug-in maven antrun en utilisant la tâche de copie avec l'option aplatissement décrite dans le fil suivant: Maven: copie des fichiers sans structure de sous-répertoire

Meilleur

6
Aurélien Bourdon

Je viens juste de rencontrer un problème similaire, et (étant donné que je ne suis pas un grand fan de l'exécution de Ant, dans ce jour et cet âge, dans Ant), j'ai fini par utiliser le org.Apache.portals.jetspeed-2: jetspeed-unpack -maven-plugin (lien mvnrepository ici ). Dans sa configuration <ressource>, vous pouvez spécifier une option <flat> true </ flat> qui aplatira la structure de répertoires à votre guise.

1
user1932890

Vous pourrez peut-être vous approcher un peu plus en utilisant <useSubDirectoryPerArtifact>false</useSubDirectoryPerArtifact> . Mais je pense que l'objectif unpack-dependencies va toujours inclure le chemin complet des fichiers à partir des artefacts qu'il décompresse.

0
pioto