2009-09-30 9 views
20

Pour les gourous Maven: J'essaie de regrouper des artefacts de projet non-java (.NET) dans un seul fichier zip. Je vais avoir 2 problèmes:Maven créant un assemblage zip plat

Si je change l'emballage dans mon POM à zip <packaging>zip</packaging>, je reçois ce message d'erreur: [INFO] Cannot find lifecycle mapping for packaging: 'zip'. Component descriptor cannot be found in the component repository: org.apache.mav en.lifecycle.mapping.LifecycleMappingzip. OK, pas grand-chose - je l'ai changé à <packaging>pom</packaging> pour se débarrasser du pot inutile qui est par ailleurs créé dans le répertoire cible

Mon problème principal est que les fichiers que j'emballe dans ZIP sont imbriqués dans quelques répertoires mais j'ai besoin de les mettre dans le répertoire principal de ZIP. Voici mon fichier de montage:

<assembly> 
    <id>bin</id> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
     <directory>${basedir}/${project.artifactId}</directory> 
     <includes> 
     <include>**/Bin/Release/*.dll</include> 
     <include>**/Bin/Release/*.pdb</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 

Quand je lance - je vais fichier ZIP, mais les fichiers seront imbriquées commençant par C: \ suivi par le chemin complet. Pour vous donner idée - projet dépotoirs, il est les binaires dans la structure suivante ProjectFoo\ProjectFoo\subproject1\Bin\Release\foo.dll et j'ai besoin ZIP\foo.dll

configuration VOICI plugin Assembly:

<plugin> 
<artifactId>maven-assembly-plugin</artifactId> 
<configuration> 
    <descriptors> 
     <descriptor>assembly.xml</descriptor> 
    </descriptors> 
</configuration> 
<executions> 
    <execution> 
     <id>zip</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
    </execution> 
</executions> 

Peut-être que j'ai juste besoin d'utiliser antrun et exécuter zip ant tâche?

Répondre

27

Comme vous l'avez vu, il n'y a pas de type d'emballage zip, il est donc logique d'utiliser l'emballage pom comme vous l'avez choisi.

Vous avez rencontré un petit trou dans le traitement du plugin d'assemblage. Vous pouvez résoudre ce problème en spécifiant plusieurs fileSets dans l'assembly avec <outputDirectory>/<outputDirectory>, un pour chaque répertoire que vous souhaitez inclure, c'est évidemment un PITA, et probablement pas une solution acceptable.

Une approche alternative consiste à utiliser la tâche de copie Ant pour copier toutes les DLL dans un répertoire de transfert, puis à inclure ce répertoire dans l'assembly.

La configuration suivante doit faire ce que vous êtes après:

La configuration antrun-plugin:

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
     <phase>process-resources</phase> 
     <configuration> 
      <tasks> 
      <copy todir="${project.build.directory}/dll-staging"> 
       <fileset dir="${basedir}/${project.artifactId}"> 
       <include name="**/Bin/Release/*.dll"/> 
       <include name="**/Bin/Release/*.pdb"/> 
       </fileset> 
       <flattenmapper/> 
      </copy> 
      </tasks> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

L'assemblée:

<assembly> 
    <id>bin</id> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
     <directory>${project.build.directory}/dll-staging</directory> 
     <outputDirectory>/</outputDirectory> 
     <includes> 
     <include>*.dll</include> 
     <include>*.pdb</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 
+0

Exactement ce que je avais besoin! Merci Rich! – Bostone

+0

vous êtes les bienvenus –

+0

Il y a encore un problème cependant. Le zip maintient toujours un répertoire supérieur de type "artefactId-Version". Quand j'extrais un fichier zip, tous mes fichiers ne se retrouvent pas dans '/' mais dans '/ Foo-1.0-SNAPSHOT /'. Pourtant, les fichiers sont correctement copiés dans target/dll-staging – Bostone

Questions connexes