2008-11-12 3 views
8

Supponiamo che io ho il seguente layout di directory in un progetto Maven:Come posso assemblare un'applicazione console con Maven senza decomprimere tutte le dipendenze?

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

Vorrei costruire un file zip che, quando decompresso, produce qualcosa di simile:

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

dove `run. xx 'sono script di shell eseguibili che chiameranno la mia applicazione principale e metti tutte le dipendenze sul classpath.

Ciò è possibile con alcuni dei plug-in Maven "ufficiali", ad es. Maven-assemblaggio-plugin?

risposta

11

Io uso il AppAssembler plugin per ottenere qualcosa di simile. Esempio:

... 
<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

L'appassembler genera i file 'run.xx' per voi.

Se sono già stati creati gli script della shell, è possibile utilizzare il plugin maven-assembly-per creare il file zip. Per raccogliere le dipendenze è possibile utilizzare il plugin maven-dependency-plugin.

1

Il Maven-assemblaggio-plugin può anche copiare le dipendenze nella vostra assemblea, includendo qualcosa di simile al di sotto nella vostra assemblea file di descrizione:

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

Ho usato il Maven-assemblaggio-plugin per acheive qualcosa di simile in un progetto. Volevo creare un file zip durante la fase del pacchetto, invece di chiamare manualmente assembly: assembly. Ecco quello che mi si avvicinò con:

/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

Questo assembly può essere distribuito automaticamente con mvn deploy? –