155 votes

comment construire un pot de graisse avec Maven

Je suis assez nouveau pour Maven. J'ai une base de code que je veux distribuer comme jar. Il dépend également des bocaux externes, que je souhaite regrouper dans le dernier bocal. J'ai entendu dire que cela peut être fait en utilisant maven-assembly-plug-in, mais je ne comprends pas comment. Quelqu'un pourrait-il me donner des exemples? En ce moment, j'utilise un gros pot pour emballer le dernier pot. Je veux réaliser la même chose en utilisant Maven.

193voto

Jigar Joshi Points 116533

Ajouter le plugin suivant à votre pom.xml

       ... 
      <build>
      <plugins>
      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>CHOOSE LATEST VERSION HERE</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>

            </configuration>
            <executions>
                <execution>
                    <id>assemble-all</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        </plugins>
        </build>
 

Après la configuration de ce plug-in, l'exécution de mvn package produira deux fichiers jar: un contenant uniquement les classes du projet et un second fichier fat contenant toutes les dépendances avec le suffixe "-jar-with-dependencies".

si vous voulez corriger classpath configuration au moment de l'exécution, ajoutez également le plugin suivant

     <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                    <mainClass>fully.qualified.MainClass</mainClass>
                </manifest>
            </archive>
        </configuration>
    </plugin>
 

72voto

phlogratos Points 3424

Vous pouvez utiliser le plugin maven shade, voir ici:

 http://maven.apache.org/plugins/maven-shade-plugin/index.html
 

Après avoir configuré le plug-in shade dans votre construction, la commande mvn package créera un seul fichier jar avec toutes les dépendances fusionnées.

54voto

ggrandes Points 578

Peut-être vous voulez maven-ombre-plugin, paquet de dépendances, de minimiser le code inutilisé et masquer les dépendances externes pour éviter les conflits.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>2.3</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <minimizeJar>true</minimizeJar>
        <createDependencyReducedPom>true</createDependencyReducedPom>
        <dependencyReducedPomLocation>
          ${java.io.tmpdir}/dependency-reduced-pom.xml
        </dependencyReducedPomLocation>
        <relocations>
          <relocation>
            <pattern>com.acme.coyote</pattern>
            <shadedPattern>hidden.coyote</shadedPattern>
          </relocation>
        </relocations>
      </configuration>
    </execution>
  </executions>
</plugin>

Références:

18voto

user3169330 Points 51

en fait, en ajoutant le

 <archive>
   <manifest>
    <addClasspath>true</addClasspath>
    <packageName>com.some.pkg</packageName>                     
    <mainClass>com.MainClass</mainClass>
  </manifest>
</archive>
 

La déclaration à maven-jar-plugin n'ajoute pas pour moi l'entrée principale de la classe dans le fichier manifeste. Je devais l'ajouter au plug-in maven-assembly-afin d'obtenir cela dans le manifeste

6voto

matsev Points 6761

Vous pouvez utiliser le onejar-maven-plugin pour l'emballage. Fondamentalement, il assemble votre projet et de ses dépendances comme un pot, y compris non seulement votre projet fichier jar, mais également de toutes les dépendances externes comme un "pot de pots", par exemple

<build>
    <plugins>
        <plugin>
            <groupId>com.jolira</groupId>
            <artifactId>onejar-maven-plugin</artifactId>
                <version>1.4.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>one-jar</goal>
                        </goals>
                    </execution>
                </executions>
        </plugin>
    </plugins>
</build>

Note 1: options de Configuration est disponible sur le projet page d'accueil.

Note 2: Pour une raison ou l'autre, la onejar-maven-plugin projet n'est pas publiée à Maven Central. Cependant jolira.com pistes le projet d'origine, qu'il publie avec le groupId com.jolira.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X