2009-12-13 9 views
15

Ho un progetto maven2 con diversi moduli vaso, costruire il progetto otterrà archivi .jar per ciascun modulo nei moduli directory/XYZ/target/XYZ-xxxjarCome unire i jar dei moduli a un singolo jar in Maven2?

Ora, se il mio progetto P è la versione Pp .qr e voglio generare un singolo jar Pp.qr-all.jar con tutti i sotto-moduli inclusi, come dovrei fare?

risposta

18

Quello che si desidera è chiamato uber jar. Questo modulo deve avere dipendenze da tutti gli altri sottomoduli che vuoi inserire in un unico contenitore. Se crei un altro sottomodulo che produrrà un artefatto desiderato, esso può essere costruito nel reattore con tutte le sue dipendenze, ma se sarà un progetto separato dovrai installare tutte le dipendenze di uber jar.

| parent 
| -- submodule1 
... 
| -- submoduleN 
| -- uberjarSubmodule 

vaso Uber può essere fatto utilizzando:

  1. maven-shade-plugin - nel vostro caso si deve ricordare di escludere dependecies transitivi dai vostri moduli

    <project> 
    ... 
    <build> 
    <plugins> 
        <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-shade-plugin</artifactId> 
        <version>1.2.2</version> 
        <executions> 
         <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <artifactSet> 
          <excludes> 
           <exclude>classworlds:classworlds</exclude> 
           <exclude>junit:junit</exclude> 
           <exclude>jmock:jmock</exclude> 
           <exclude>xml-apis:xml-apis</exclude> 
          </excludes> 
          </artifactSet> 
         </configuration> 
         </execution> 
        </executions> 
        </plugin> 
    </plugins> 
    </build> 
    ... 
    </project> 
    
  2. maven-assembly-plugin - in this domanda troverai una risposta dettagliata

+0

l'ombra sembra un ottimo plug-in. – Clinton

1

Dipende da come lo spedirete, se il vostro barattolo è una libreria che volete che altri sviluppatori scarichino e utilizzino tramite Maven. Dovresti specificare questi come dependencies nel pom dei progetti.

Se si sta tentando di spedire qualcosa a un utente finale che vuole solo prendere il file binario e utilizzare il progetto, è possibile provare a utilizzare il plug-in assembly per impacchettare il progetto. Con questo plugin puoi impacchettare un barattolo accanto alle sue dipendenze. Non metterà tutto in un unico file jar, ma supponendo che si configuri correttamente il classpath degli utenti non dovrebbe avere importanza.

Problemi correlati