2009-10-05 9 views
7

Dans mon projet, je crée de nombreux assemblages (4-5) et ils sont sortis vers la cible.1/2 de ces assemblages ne prennent pas leur nom final (ou numéro d'assemblage), mais selon le format artefactID-version.jar..Ceci est très déroutant Pourquoi est-ce ainsi?Problème lors de la création de l'assemblage

Extraits de mon pom.xml -

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.apple</groupId> 
    <artifactId>maven</artifactId> 
    <name>maven_XX</name> 
    <version>0.0.1-SNAPSHOT</version> 


    <build> 
    <plugins> 
    <!-- Added to avoid the compilation issue wrt Annotations --> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.5</source> 
      <target>1.5</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.4.2</version> 
     <configuration> 
      <skip>true</skip> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.2-beta-4</version> 
     <executions>    
      <execution> 
      <id>clientjar</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <finalName>XX_client</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
       <descriptors> 
       <descriptor> 
        ${basedir}/src/main/resources/assemblies/clientjar.xml 
       </descriptor> 
       </descriptors> 
      </configuration> 
      </execution> 
      <execution> 
      <id>11***</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <finalName>11server</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
       <descriptors> 
       <descriptor> 
        ${basedir}/src/main/resources/assemblies/11server.xml 
       </descriptor> 
       </descriptors> 
       <outputDirectory>assemblies-target</outputDirectory> 
      </configuration> 
      </execution> 
      <execution> 
      <id>cache</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <finalName>cache</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
       <descriptors> 
       <descriptor> 
       ${basedir}/src/main/resources/assemblies/cache.xml 
       </descriptor> 
       </descriptors> 
       <outputDirectory>assemblies-target</outputDirectory> 
      </configuration> 
      </execution> 
+0

Ce n'est pas aléatoire. Les assemblages spécifiques ne suivent pas. La sortie attendue pour chacun est un pot avec le nom final fourni. Mais je les reçois comme - Project name-version.jar – user170114

Répondre

8

Lorsque vous exécutez l'ensemble, voyez-vous quelque chose comme cette sortie à la console par Maven ?:

[INFO] [assembly:single {execution: 11***}] 
[INFO] Reading assembly descriptor: C:\test\test-parent2/src/main/resources/assemblies/11server.xml 
[INFO] Building jar: C:\test\test-parent2\assemblies-target\11server.jar 
[WARNING] Configuration options: 'appendAssemblyId' is set to false, and 'classifier' is missing. 
Instead of attaching the assembly file: C:\test\test-parent2\assemblies-target\11server.jar, it will become the file for 
main project artifact. 
NOTE: If multiple descriptors or descriptor-formats are provided for this project, the value of this file will be non-de 
terministic! 

Cela se produit parce que tout vos assemblys spécifient <appendAssemblyId>false</appendAssemblyId> et aucun classificateur n'est spécifié. Le classificateur est obsolète dans la version 2.2-beta-4 donc il est ignoré quand même, c'est un bug/fonctionnalité dans le plugin. Par conséquent, Maven va toujours faire de l'un des assemblages l'artefact "principal" pour l'empaquetage jar, et vous ne le voyez pas dans votre répertoire target-assemblies. Pour contourner ce problème, vous pouvez spécifier que votre projet contient l'empaquetage pom, puis lier les objectifs du cycle de vie du pot au pom.

Pour activer les process-resources et compile objectifs que vous souhaitez changer l'emballage pour pom, ajoutez la configuration suivante à votre pom, et exécuter les objectifs du cycle de vie standard. Par exemple mvn package ou mvn install.

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions>    
    <execution> 
     <id>process-resources</id> 
     <phase>process-resources</phase> 
     <goals> 
     <goal>resources</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <executions>    
    <execution> 
     <id>compile</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>compile</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

La liste complète des objectifs liés au cycle de vie du pot se trouvent dans la section Construit en Lifecycle Manchettes du Introduction to the Build Lifecycle. Ils suivent tous un schéma similaire aux objectifs process-resources et compile. Dans votre cas, vous voudrez probablement omettre l'objectif jar.

+0

Hi Lors de l'exécution de l'assemblage, j'obtiens l'avertissement comme indiqué. Donc, vous voulez dire que je devrais utiliser goal = compiler pour les assemblages (ce qui donne des jars) et permettre au maven de compiler le but? – user170114

+0

Non, je veux dire que l'empaquetage du projet "pom" et configure les plugins afin que les buts normalement exécutés dans le cycle de vie du pot soient exécutés dans le cycle de vie de pom, avec la configuration au dessus des ressources et les plugins compilés vous exécutez toujours 'mvn install'.Cela contourne le bug dans le plugin d'assemblage –

+0

Salut .. J'ai changé l'emballage en "pom" .Ajouté les deux plugins que vous avez fournis et n'a pas fait de modifications de configuration pour les assemblages.En cours d'exécution installation mvn, pour le 2ème assembly, il donne- Causé par: org.apache.maven.project.DuplicateArtifactAttachmentException: pièce jointe d'artefact en double détectée. – user170114

11

Tirer Lyle pour commenter le niveau de la question afin d'assurer la visibilité.

Alors que la réponse précédente fonctionne Lyle rappelle que:

Si je comprends bien, il semble comme une solution peu invasive pour ce qui équivaut à un bug dans le plugin de montage. Au lieu de cela, essayez de définir false dans la configuration. Voir: MASSEMBLY-352

Pour les artefacts qui ne sont pas attachés à la distribution du référentiel, c'est une bonne solution et a bien fonctionné pour moi.

... 
<appendAssemblyId>false</appendAssemblyId> 
<attach>false</attach> 
... 
+2

Fonctionne correctement pour un projet "assemblage simple". –

Questions connexes