2016-02-06 1 views
3

J'utilise maven assembly plugin pour empaqueter une distribution de mon projet qui contient un dossier lib avec des jarres de dépendance, un dossier de configuration avec des ressources et le fichier jar contenant les fichiers de classe de projet. J'ai besoin d'exclure un paquet de l'un des fichiers de dépendance dans le dossier lib.Comment utiliser le plugin maven assembly pour exclure un paquet du pot de dépendance?

Le plugin d'assemblage a une option pour déballer des pots de dépendance, et si cela est utilisé, alors vous pouvez exclure un paquet avec assembly.xml comme ceci:

<assembly> 
    <formats> 
     <format>tar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <unpack>true</unpack> 
      <useProjectArtifact>false</useProjectArtifact> 
      <outputDirectory>./${project.build.finalName}/lib</outputDirectory> 
      <scope>runtime</scope> 
      <unpackOptions> 
       <excludes> 
        <exclude>**/excludedpackage/**<exclude> 
       </excludes> 
      </unpackOptions> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

Ma question est, comment puis-je exclure un paquet à partir d'un pot de dépendance sans utiliser unpack (c'est-à-dire en gardant toutes les dépendances empaquetées comme des jars)? Idéalement, je voudrais une solution qui peut être faite en utilisant le plugin d'assemblage - si ce n'est pas possible, quelle est la façon la plus simple de réaliser ce que je veux faire?

Répondre

1

Je ne pense pas que vous pouvez remballer le JAR après qu'il a été déballé et filtré. Vous pouvez soumettre une demande d'amélioration au Maven Assembly Plugin JIRA.


A (complexe) solution serait d'utiliser le maven-dependency-plugin pour unpack la dépendance de projet que vous voulez exclure quelque chose, puis utilisez les maven-jar-plugin à jar les classes excluant à nouveau un paquet dans un nouveau JAR et enfin déclarer un élément <files> pour le maven-assembly-plugin pour cette dépendance particulière.

Un exemple de configuration serait

<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.10</version> 
    <executions> 
     <execution> 
      <id>unpack</id> 
      <goals> 
       <goal>unpack-dependencies</goal> 
      </goals> 
      <phase>prepare-package</phase> 
      <configuration> 
       <includeArtifactIds><!-- include here the dependency you want to exclude something from --></includeArtifactIds> 
       <outputDirectory>${project.build.directory}/unpack/temp</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.6</version> 
    <executions> 
     <execution> 
      <id>repack</id> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <phase>prepare-package</phase> 
      <configuration> 
       <classesDirectory>${project.build.directory}/unpack/temp</classesDirectory> 
       <excludes> 
        <exclude>**/excludedpackage/**</exclude> 
       </excludes> 
       <outputDirectory>${project.build.directory}/unpack</outputDirectory> 
       <finalName>wonderful-library-repackaged</finalName> <!-- give a proper name here --> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Ensuite, dans la configuration d'assemblage, vous avez:

<files> 
    <file> 
     <source>${project.build.directory}/unpack/wonderful-library-repackaged.jar</source> 
     <outputDirectory>/${project.build.finalName}/lib</outputDirectory> 
    </file> 
</files>