web-dev-qa-db-fra.com

Différence entre les plugins maven (plugins d'assemblage, plugins de jar, plugins ombrés)

Je suis un débutant dans maven et maintenant je suis confus avec la différence entre ces plugins maven. Est-ce que tout cela crée des fichiers jar? maintenant mes questions sont

  1. quelle est la différence entre le pot créé dans chaque plugin (plugin d'assemblage, plugin de pot, plugin ombré)

  2. Le but de chaque plugin. (Assemblage, plugin jar, plugin ombré)

  3. Je sais même sans spécifier aucun de ces plugins une fois que le type de package mvn aura une sortie jar. Quelle est la différence entre le pot de sortie sans ces plugins et le pot de sortie avec ces plugins?. TIA

41
ilovejavaAJ
  1. maven-jar-plugin: Ce plugin permet de créer et de signer des fichiers JAR. Mais il compile juste les fichiers Java sous src/main/Java et src/main/resources/. Il n'inclut pas les fichiers JAR de dépendances.
  2. maven-Assembly-plugin: Ce plugin extrait tous les fichiers JAR de dépendance dans des classes brutes et les regroupe. Il peut également être utilisé pour créer un fichier JAR exécutable en spécifiant la classe principale. Il fonctionne uniquement dans le projet avec moins de dépendances; pour les grands projets avec de nombreuses dépendances, cela provoquera un conflit entre les noms de classe Java.
  3. maven-shade-plugin: Il regroupe toutes les dépendances dans un uber-JAR. Il peut également être utilisé pour créer un fichier JAR exécutable en spécifiant la classe principale. Ce plugin est particulièrement utile car il fusionne le contenu de fichiers spécifiques au lieu de les écraser par relocalisation des classes . Cela est nécessaire lorsqu'il existe des fichiers de ressources portant le même nom dans les fichiers JAR et que le plug-in essaie de regrouper tous les fichiers de ressources ensemble.

Référez-vous: comparaison: maven plugin jar, Assembly, shade

70
secfree

plugin Jar

Voyons ce que la commande suivante peut dire.

mvn help:describe -Dplugin=org.Apache.maven.plugins:maven-jar-plugin

Il a 3 objectifs, help, jar et test-jar. Je crois que vous êtes principalement intéressé par l'objectif jar, qui selon la description fait ce qui suit:

Créez un fichier JAR à partir du projet en cours.

En remarque, l'exécution de mvn help:effective-pom sur un projet avec un package défini sur jar, montre que ce plugin est automatiquement configuré et s'exécute pendant la phase package.

  <plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <executions>
      <execution>
        <id>default-jar</id>
        <phase>package</phase>
        <goals>
          <goal>jar</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Plugin d'assemblage

Celui-ci sert un but différent. Il a 8 buts, mais 6 d'entre eux sont déconseillés. Donc, en dehors de l'objectif help, cela nous laisse avec l'objectif single.

mvn help:describe -Dplugin=org.Apache.maven.plugins:maven-Assembly-plugin

Assemblez un ensemble d'applications ou une distribution à partir d'un descripteur d'assembly. Cet objectif convient soit pour se lier au cycle de vie, soit pour appeler directement à partir de la ligne de commande (à condition que tous les fichiers requis soient disponibles avant le démarrage de la génération ou soient produits par un autre objectif spécifié avant celui-ci sur la ligne de commande).

Vous pouvez utiliser le plugin Assembly lorsque vous souhaitez fournir plus que l'artefact de votre projet (JAR, WAR, etc.), mais la configuration va dans un autre fichier.

plugin Shade

La description de l'objectif principal est un peu décevante.

mvn help:describe -Dplugin=org.Apache.maven.plugins:maven-shade-plugin

Mojo qui effectue la délégation d'ombrage au composant Shader.

Vous voulez surtout utiliser ce plugin si vous voulez produire un uber-jar, qui est votre artefact dans un JAR avec toutes ses dépendances transitives.

Fondamentalement, si vous construisez une bibliothèque, vous vous en tiendrez au plugin JAR par défaut. Si vous créez une application, vous pouvez envisager d'utiliser le plugin d'ombre, mais pour moi, c'est un peu rapide et sale. Si uber-jar n'est pas à votre goût ou si la distribution ne peut pas tenir dans un seul JAR (configuration externe, dépendances natives, etc.), vous devriez opter pour le plugin Assembly.

19
Arthur Noseda

Le plugin jav Maven crée simplement un fichier jar avec tous les fichiers SOURCE [fichiers .class compilés à partir de fichiers .Java] mais un pot lui-même ne peut pas être déployé car il existe de nombreuses autres dépendances comme des fichiers jar tiers ou d'autres fichiers jar de bibliothèque qui sont nécessaire pour exécuter le fichier jar SOURCE. C'est là que le plugin Maven Assembly entre en scène, il crée un package d'une extension de votre choix comme .Zip, .tar, .gz qui est un package entièrement déployable avec toutes les dépendances. Vous pouvez également spécifier la structure de répertoires dans le plugin Assembly qui doit être créée lorsque le package est déployé sur le serveur

0
Shailesh