Maven: ajouter le fichier arbitraire en tant que ressource de contexte de servlet
-
04-10-2019 - |
Question
J'ai un projet de guerre maven qui produit webapp.war, et une « peau » maven projet qui produit skin.zip (un fichier complet des ressources et des fichiers XML). Maintenant, je veux ajouter ce fichier zip en tant que ressource de contexte de servlet (par exemple WEB-INF / skin.zip).
J'ai essayé d'utiliser des superpositions, mais il élargit le fichier zip dans WEB-INF au lieu de placer le fichier il non élargi:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<overlays>
<overlay>
<groupId>com.mycompany</groupId>
<artifactId>skin</artifactId>
<type>zip</type>
<targetPath>WEB-INF</targetPath>
</overlay>
</overlays>
</configuration>
</plugin>
Est-il possible pour l'empêcher d'étendre la ressource - ou en quelque sorte coller le fichier là-dedans (sans utiliser le plug-in de fourmis).
Note: type
est un élément de configuration totalement inutile et inutile - dire qu'il n'a pas le plug-in comment développer l'artefact, comme on pouvait s'y attendre - il raconte comment il FIND il. Par exemple, si vous changez le type de zip à pot, il se plaint qu'il ne peut pas trouver l'artefact (la manière la plus inutile possible).
La solution
J'ai essayé d'utiliser des superpositions, mais il élargit le fichier zip dans WEB-INF
Oui, c'est ce que font les superpositions, le contenu est décompressé à fusionner avec la guerre. C'est tout simplement pas le bon outil dans votre cas.
Est-il possible pour l'empêcher d'étendre la ressource - ou en quelque sorte coller le fichier là-dedans
J'utiliser le plugin Maven Dependency et son dependency:copy
but:
dependency:copy
prend une liste d'objets définis dans la section de configuration du plug-in et les copies à un emplacement spécifié, les renommer ou stripping la version si on le souhaite. Cet objectif peut résoudre les artefacts de dépôts distants si elles n'existent pas local.
bind sur la phase prepare-package
. Ci-dessous, un point de départ:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-prepare-package</id>
<phase>prepare-package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.mycompany</groupId><!-- or ${project.groupId} -->
<artifactId>skin</artifactId>
<version>X.Y.Z</version><!-- or ${project.version} -->
<type>zip</type>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
Voir Copie artefacts spécifiques pour d'autres exemples.