2010-09-22 9 views
1

J'ai un projet de guerre maven qui produit webapp.war, et un projet maven 'skin' qui produit skin.zip (un fichier plein de ressources et de fichiers XML). Maintenant, je veux ajouter ce fichier zip en tant que ressource de contexte de servlet (par exemple WEB-INF/skin.zip).maven: ajouter un fichier arbitraire en tant que ressource de contexte de servlet

J'ai essayé d'utiliser des superpositions, mais il élargit le fichier zip dans WEB-INF au lieu de placer le fichier non développé il y a:

<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à (sans utiliser ant-plugin).

Note: type est un élément de configuration totalement inutile et inutile - il ne dit pas le plug-in comment développer l'artefact, comme on pouvait s'y attendre - il dit comment il FIND il. Par exemple, si vous changez de type de zip à jar, il se plaint qu'il ne peut pas trouver l'artefact (de la manière la plus inutile possible).

Répondre

2

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. Ce n'est 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à

j'utiliser le Maven Dependency Plugin et son objectif dependency:copy:

  • dependency:copy prend une liste d'artefacts définis dans la section de configuration du plugin et les copie dans un emplacement spécifié, en les renommant ou en supprimant la version si vous le souhaitez. Cet objectif peut résoudre les artefacts provenant de référentiels distants s'ils n'existent pas en local.

Et lier 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 Copying specific artifacts pour plus d'exemples.

+0

Cela fonctionne, bien que le côté négatif de celui-ci soit copié plutôt que inclus en superposition; est que tous les plugins IDE actuels ou futurs (je pense à m2eclipse) ne connaîtront pas la dépendance comme étant un composant d'un fichier war - et donc vous aurez un comportement séparé de déploiement/temps de débogage/d'exécution IDE . – Justin

+0

@Justin Ah, je vois. J'ai peur que l'alternative serait d'inclure votre skin.zip ** dans ** une autre archive pour que les overlays fonctionnent. C'est possible cependant. –

Questions connexes