2008-11-12 27 views
8

Supongamos que tengo la siguiente estructura de directorios en un proyecto Maven:¿Cómo puedo armar una aplicación de consola con Maven sin desempaquetar todas las dependencias?

src/ 
|-- main 
| |-- bin 
| | |-- run.cmd 
| | `-- run.sh 
| |-- etc 
| | |-- common-spring.xml 
| | |-- log4j.xml 
| | `-- xml-spring.xml 
| `-- java 
|  `-- com 
... 

me gustaría construir un archivo zip que, cuando se abrió la cremallera, produce algo como esto:

assembly 
|-- bin 
| |-- run.cmd 
| `-- run.sh 
|-- etc 
| |-- common-spring.xml 
| |-- log4j.xml 
| `-- xml-spring.xml 
`-- lib 
    |-- dependency1.jar 
    |-- dependency2.jar 
... 

donde `plazo. xx 'son scripts de shell ejecutables que llamarán a mi aplicación principal y ponen todas las dependencias en el classpath.

Esto es posible con algunos de los complementos 'oficiales' de Maven, p. maven-assembly-plugin?

Respuesta

11

Uso el AppAssembler plugin para obtener algo similar. Ejemplo:

... 
<build> 
<plugins> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>appassembler-maven-plugin</artifactId> 
    <configuration> 
     <programs> 
     <program> 
      <mainClass>com.acme.MainClass</mainClass> 
      <name>app</name> 
     </program> 
     </programs> 
    </configuration> 
    </plugin> 
</plugins> 

-1

El appassembler genera los archivos '' run.xx para usted.

Si ya ha creado los guiones del intérprete de órdenes usted mismo, puede usar maven-assembly-plugin para crear el archivo comprimido. Para reunir las dependencias puede usar maven-dependency-plugin.

1

El experto-montaje-plugin también puede copiar las dependencias en su montaje, mediante la inclusión de algo como el siguiente en su archivo descriptor de montaje:

<dependencySets> 
    <!-- Copy dependency jar files to 'lib' --> 
    <dependencySet> 
     <outputDirectory>lib</outputDirectory> 
     <includes> 
      <include>*:jar:*</include> 
     </includes> 
    </dependencySet> 
</dependencySets> 
5

He utilizado el experto-montaje-plugin para acheive algo similar en un proyecto. Quería que se creara un archivo zip durante la fase del paquete, en lugar de llamar al ensamblaje manualmente: assembly. Esto es lo que ocurrió:

/src/assemble/distribution.xml:

<assembly> 
    <id>distribution</id> 

    <!-- specify the output formats --> 
    <formats> 
    <format>zip</format> 
    </formats> 

    <!-- include all runtime libraries in the /lib folder of the output file --> 
    <dependencySets> 
    <dependencySet> 
     <outputDirectory>/lib</outputDirectory> 
     <scope>runtime</scope> 
    </dependencySet> 
    </dependencySets> 

    <fileSets> 
    <!-- include all *.jar files in the target directory --> 
    <fileSet> 
     <directory>target</directory> 
     <outputDirectory></outputDirectory> 
     <includes> 
     <include>*.jar</include> 
     </includes> 
    </fileSet> 

    <!-- include all files in the /conf directory --> 
    <fileSet> 
     <outputDirectory></outputDirectory> 
     <includes> 
     <include>conf/**</include> 
     </includes> 
    </fileSet> 
    </fileSets> 

</assembly> 

/pom.xml

...

 <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 

      <configuration> 
       <descriptors> 
        <descriptor>src/assemble/distribution.xml 
        </descriptor> 
       </descriptors> 
      </configuration> 

      <!-- append assembly:assembly to the package phase --> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>assembly</goal> 
        </goals> 
       </execution> 
      </executions> 

     </plugin> 

...

+0

¿Se puede implementar este ensamblaje automáticamente con mvn deploy? –

Cuestiones relacionadas