2009-12-13 10 views

Respuesta

18

Lo que quiere lograr se llama uber jar. Este módulo debe tener dependencias de todos los demás submódulos que desee empaquetar en un solo contenedor. Si crea otro submódulo que produzca un artefacto deseado, puede construirse en un reactor con todas sus dependencias, pero si será un proyecto separado, deberá instalar todas las dependencias de uber jar.

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

tarro de Uber se puede hacer mediante el uso de:

  1. maven-shade-plugin - en su caso, usted tiene que recordar para excluir dependecies transitivos de sus módulos

    <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 - en this pregunta encontrará una respuesta detallada

+0

sombra parece un plugin genial. – Clinton

1

Depende de cómo va a enviar esto, si su jar es una biblioteca que desea que otros desarrolladores descarguen y utilicen vía maven. Debe especificar estos como dependencies en los proyectos pom.

Si intenta enviar algo a un usuario final que solo quiere tomar el binario y usar su proyecto, puede intentar usar el complemento assembly para empaquetar su proyecto. Con este complemento puede empaquetar un contenedor junto con sus dependencias. No lo colocará todo en un solo archivo jar, pero suponiendo que configure correctamente la classpath de los usuarios, no debería importar.

Cuestiones relacionadas