2013-09-25 1 views
1

J'ai créé un tar (par exemple project.tar) en utilisant le descripteur de l'assembly maven. J'ai besoin de créer un autre fichier tar (disons final.tar) qui contiendrait le tar créé précédemment (project.tar) avec un fichier de script.Emballage d'un tar créé à l'aide de l'assemblage maven dans un autre tar à l'aide de l'assemblage maven

Pour ce faire, j'essaie d'utiliser deux descripteurs spécifiés dans pom.xml. Un descripteur est pour project.tar et second pour final.tar. Pendant ce temps, je suis confronté à l'erreur suivante:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.4:single (default-cli) on project ede: Failed to create assembly: Error creating assembly archive bin: A tar file cannot include itself. -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.4:single (default-cli) on project ede: Failed to create assembly: Error creating assembly archive bin: A tar file cannot include itself. " 

Mon fichier pom.xml est

... 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.4</version> 
    <goals> 
     <goal>single</goal> 
    </goals> 
    <configuration> 
    <descriptors> 
     <descriptor>assembly/src.xml</descriptor> 
     <descriptor>assembly/final.xml</descriptor> 
    </descriptors> 
    <appendAssemblyId>false</appendAssemblyId> 
    </configuration> 
</plugin> 
... 

  1. J'ai aussi essayé d'utiliser le fichier pom.xml comme
... 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.4</version> 
    <executions> 
     <execution> 
      <id>jar-with-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
        <descriptor>assembly/src.xml</descriptor> 
       </descriptors> 
       <appendAssemblyId>false</appendAssemblyId> 
      </configuration> 
     </execution> 
     <execution> 
      <id>bin</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
        <descriptor>assembly/final.xml</descriptor> 
       </descriptors> 
       <appendAssemblyId>false</appendAssemblyId> 
       <finalName>ede2</finalName> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

De cette façon, il n'est pas capable de localiser les fichiers descripteurs.

Quelqu'un pourrait-il me guider si je fais quelque chose de mal?

Répondre

0

Une partie de la réponse consiste à utiliser descriptorRef comme indiqué dans le module d'extension examples.

J'espère que cela vous donnera quelque chose pour commencer.

1

Je sais que cet article est très ancien mais je pense qu'il pourrait avoir besoin d'explications. À mon avis, le meilleur moyen pour ce que vous voulez faire est d'utiliser deux executionsmaven-assembly-plugin. Le premier va générer votre projet tar et le second vous tar final. (s'il vous plaît lire toute la réponse avant de dire qu'il n'y a plus simple)

Voici ce que je ferais (et cela fonctionne bien sûr).

Comme j'aime avoir les assemblées dans les différents dossiers (parce que je pense qu'il est plus facile comme ça), je déclare les propriétés dans mon pom avec les chemins de répertoires:

<properties> 
    <myproperties.assembly.project-tar.dir>${project.build.directory}/assembly-project/</myproperties.assembly.project-tar.dir> 
    <myproperties.assembly.final-tar.dir>${project.build.directory}/assembly-final/</myproperties.assembly.final-tar.dir> 
</properties> 

Ensuite, dans le maven-assembly-plugin configurer le exécutions (jamais oublier que l'ordre des exécutions est très important car ils seront exécutés dans l'ordre de déclaration si elles sont binded sur la même phase):

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.5.3</version> 
    <executions> 
     <execution> 
      <id>project-tar</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <appendAssemblyId>false</appendAssemblyId> 
       <outputDirectory>${myproperties.assembly.project-tar.dir}</outputDirectory> 
       <descriptors> 
        <descriptor>src/assembly/project-tar.xml</descriptor> 
       </descriptors> 
      </configuration> 
     </execution> 
     <execution> 
      <id>final-tar</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${myproperties.assembly.final-tar.dir}</outputDirectory> 
       <descriptors> 
        <descriptor>src/assembly/final-tar.xml</descriptor> 
       </descriptors> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

(vous pouvez voir que les goudrons seront différents dossiers et que le proj ect tar n'aura pas l'identifiant de l'assembly ajouté à son nom, donc il ressemblera à myproject-1.0.tar)

Maintenant concernant les définitions des assemblages.

Pour le projet tar.xml, je comprend que les pots dans, vous pouvez faire ce que vous voulez:

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
    <id>project</id> 
    <formats> 
     <format>tar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
     <fileSet> 
      <directory>${project.build.directory}</directory> 
      <outputDirectory></outputDirectory> 
      <includes> 
       <include>*.jar</include> 
      </includes> 
     </fileSet> 
    </fileSets> 
</assembly> 

Et pour le goudron final.xml, j'inclure le goudron de projet et les scripts que j'ai dans mon dossier src/main/scripts:

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
    <id>final</id> 
    <formats> 
     <format>tar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <fileSets> 
     <fileSet> 
      <directory>${myproperties.assembly.project-tar.dir}</directory> 
      <outputDirectory></outputDirectory> 
      <includes> 
       <include>*.tar</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>src/main/scripts</directory> 
      <outputDirectory></outputDirectory> 
      <fileMode>755</fileMode> 
     </fileSet> 
    </fileSets> 
</assembly> 

Et nous sommes, vous avez vos deux goudrons.


Il y a une solution plus simple qui est que vous avez fait au début:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.5.3</version> 
    <executions> 
     <execution> 
      <id>project-tar</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
        <descriptor>src/assembly/project-tar.xml</descriptor> 
        <descriptor>src/assembly/final-tar.xml</descriptor> 
       </descriptors> 
      </configuration> 
     </execution> 
    </executions> 
    <configuration> 
     <appendAssemblyId>true</appendAssemblyId> 
    </configuration> 
</plugin> 

L'ordre descriptors est très important bien sûr. La seule différence avec votre solution initiale est que je garde la propriété appendAssemblyId définie sur true, sinon les deux assemblages porteront le même nom et lorsque le maven-assembly-plugin essayera de construire l'assemblage final, il détectera qu'il y a un fichier qui porte déjà ce nom et échouera en disant qu'il ne peut pas s'inclure ...

Avec ma solution en deux exécutions, vous pouvez définir le appendAssemblyId à .