2015-03-08 13 views
12

Ich möchte meinen Quellcode in einem JAR mit allen Abhängigkeiten kombinieren und dies zusammen mit anderen Dateien in eine ZIP-Datei packen. Ich bin in der Lage, das eine Jar mit allen Abhängigkeiten sowie die ZIP-Datei zu erstellen, aber ich kann die zwei nicht kombinieren.Kombinieren Jar-mit-Abhängigkeiten und eine ZIP-Datei mit dem Maven Assembly-Plugin

Ich möchte schließlich die folgende Verzeichnisstruktur in der Zip-Datei:

loader/bin/shellscript.sh

loader/lib/jar-with-dependencies.jar

loader/appname/config/config.xml

Hier ist ein Auszug aus meiner pom-Datei:

<plugins> 
    <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>fully.qualified.MainClass</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <descriptors> 
        <descriptor>src/main/assembly/assembly.xml</descriptor> 
       </descriptors> 
       </configuration> 
     </plugin> 

Hier ist ein Auszug aus meiner Versammlung

<assembly> 
    <id>bin</id> 
    <!-- Specifies that our binary distribution is a zip package --> 
    <formats> 
     <format>zip</format> 
    </formats> 

    <baseDirectory>SpreadsheetLoaderApp</baseDirectory> 

    <fileSets> 
     <fileSet> 
      <directory>corporatebondpurchases</directory> 
      <outputDirectory>${basedir}/corporatebondpurchases/config</outputDirectory> 
      <includes> 
       <include>*.xml</include> 
       <include>*.properties</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>corporatebondpurchases</directory> 
      <outputDirectory>${basedir}/bin</outputDirectory> 
      <includes> 
       <include>*.sh</include> 
      </includes> 
     </fileSet> 
    </fileSets> 
</assembly> 

Hier ist die Ausgabe von einem Teil des Build:

[INFO] --- maven-assembly-plugin:2.4:single (default-cli) @ SpreadsheetLoader --- 
[INFO] Reading assembly descriptor: src/main/assembly/assembly.xml 
[INFO] Building zip: C:\Software\SpringSTS\workspace\SpreadsheetLoader\target\SpreadsheetLoader-0.0.1-SNAPSHOT-bin.zip 
[INFO] Building jar: C:\Software\SpringSTS\workspace\SpreadsheetLoader\target\SpreadsheetLoader-0.0.1-SNAPSHOT-jar-with-dependencies 

Dies sowie die ZIP-Datei und nicht in der Schaffung eine Jar unter Ziel (wenn auch mit vollständigen Pfaden erfolgreich als relative Pfade). Was ich will ist, dass die Jar-Datei als Teil der Zip-Datei enthalten ist.

EDIT:

Nach verschiedenen Blog-Posts Erforschung Ich habe es geschafft, diese Funktion zu erhalten, indem die folgenden POM und Baugruppendateien mit

<build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>jar-with-dependencies</id> 
       <phase>package</phase> 
       <goals> 
        <goal>single</goal> 
       </goals> 
       <configuration> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <archive> 
         <manifest> 
          <mainClass>fully.qualified.MainClass</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </execution> 
      <execution> 
       <id>dist</id> 
       <phase>package</phase> 
       <goals> 
        <goal>single</goal> 
       </goals> 
       <configuration> 
        <descriptors> 
         <descriptor>src/main/assembly/assembly.xml</descriptor> 
        </descriptors> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 

und die entsprechenden Baugruppendatei ...

<assembly> 
    <id>dist</id> 
    <!-- Specifies that our binary distribution is a zip package --> 
    <formats> 
     <format>zip</format> 
    </formats> 

    <includeBaseDirectory>true</includeBaseDirectory> 
    <baseDirectory>SpreadsheetLoader</baseDirectory> 

    <files> 
     <file> 
      <source>target/${project.artifactId}-${project.version}-jar-with-dependencies.jar</source> 
      <outputDirectory>lib</outputDirectory> 
     </file> 
    </files> 

    <fileSets> 
     <fileSet> 
      <directory>applicationbuild/${buildname}</directory> 
      <outputDirectory>${buildname}/config</outputDirectory> 
      <includes> 
       <include>*.xml</include> 
       <include>*.properties</include> 
      </includes> 
     </fileSet> 
     <fileSet> 
      <directory>applicationbuild/${buildname}</directory> 
      <outputDirectory>bin</outputDirectory> 
      <includes> 
       <include>*.sh</include> 
      </includes> 
      <lineEnding>unix</lineEnding> 
      <fileMode>0755</fileMode> 
     </fileSet> 
     <fileSet> 
      <directory>./</directory> 
      <outputDirectory>logs</outputDirectory> 
      <excludes> 
       <exclude>*/**</exclude> 
      </excludes> 
     </fileSet> 
     <fileSet> 
      <directory>./</directory> 
      <outputDirectory>${buildname}/sourcedata</outputDirectory> 
      <excludes> 
       <exclude>*/**</exclude> 
      </excludes> 
     </fileSet> 
    </fileSets> 
</assembly> 

Dies gibt mir eine schöne einfache Verzeichnisstruktur für die Bereitstellung. Meine Hauptquelle der Informationen kam von der folgenden Website:

http://www.drawbackz.com/stack/175442/maven-assembly-plugin-how-to-create-nested-assemblies.html

Dank

Antwort

4

Ich bin glücklich genug, um mit dem obigen Ergebnis. Dies ist jedoch mein erster Versuch, Maven zu benutzen. Wenn jemand einen besseren Weg hat, nehme ich gerne den Rat.

+1

Ich empfehle, die echte Antwort von Ihrer Frage zu schneiden und es in diesem Beitrag einzufügen und es als akzeptierte Antwort zu markieren –