2008-11-12 8 views
8

Angenommen, ich die folgende Verzeichnisstruktur in einem Maven-Projekt haben:Wie stelle ich eine Konsolenanwendung mit Maven zusammen, ohne alle Abhängigkeiten zu entpacken?

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

Ich mag würde eine Zip-Datei erstellen, die, wenn so etwas wie dies erzeugt dekomprimiert:

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

wo `laufen. xx 'sind ausführbare Shell-Skripte, die meine Hauptanwendung aufrufen und alle Abhängigkeiten auf den Klassenpfad setzen.

Ist dies mit einigen der "offiziellen" Maven-Plugins möglich, z.B. Maven-Assembly-Plugin?

Antwort

11

Ich benutze die AppAssembler plugin, um etwas ähnliches zu bekommen. Beispiel:

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

Die appassembler erzeugt die 'run.xx' Dateien für Sie.

Wenn Sie die Shell-Skripte bereits selbst erstellt haben, können Sie das maven-assembly-plugin verwenden, um die zip-Datei zu erstellen. Um die Abhängigkeiten zu sammeln, können Sie maven-dependency-plugin verwenden.

1

Die Maven-Montage-Plugin auch die Abhängigkeiten in Ihre Assembly kopieren kann, durch so etwas wie die unten in Ihrer Assembly Descriptor-Datei einschließlich:

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

ich die Maven-Montage-Plugin verwendet habe, um zu acheive etwas Ähnliches in einem Projekt. Ich wollte, dass eine Zip-Datei während der Paketphase erstellt wird, anstatt manuell assembly: assembly aufzurufen. Hier ist, was ich kam mit:

/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

Kann diese Assembly automatisch mit mvn deploy bereitgestellt werden? –

Verwandte Themen