2015-03-08 15 views
12

Desidero combinare il mio codice sorgente in un JAR con tutte le dipendenze e comprimere questo in un file zip insieme ad altri file. Sono in grado di creare l'unico Jar con tutte le dipendenze e il file ZIP, ma non riesco a combinare i due.Combinare Jar-with-dependencies e un file ZIP utilizzando il plug-in di assembly Maven

fine ho voglio la seguente struttura di directory nel file zip:

caricatore/bin/shellscript.sh

caricatore/lib/vaso-con-dependencies.jar

caricatore/appname/config/config.xml

Ecco un estratto del mio file pom:

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

Ecco un estratto dal mio montaggio

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

Ecco l'uscita dalla parte del costruire:

[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 

Questo riesce a creare un vaso sotto bersaglio così come il file ZIP (anche se con percorsi completi, piuttosto di percorsi relativi). Quello che voglio è che il file Jar sia incluso come parte del file zip.

EDIT:

Dopo la ricerca di vari post del blog sono riuscito a ottenere questo lavoro utilizzando i seguenti POM e di assemblaggio dei file

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

e il file assembly corrispondente ...

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

Questo mi dà una bella struttura di directory semplice per scopi di implementazione. La mia principale fonte di informazioni è venuto dal seguente sito:

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

Grazie

risposta

4

Sono abbastanza contento del risultato di cui sopra. Comunque questo è il mio primo tentativo di usare Maven. Se qualcuno ha un modo migliore per farlo, accetterei volentieri il consiglio.

+1

mi raccomando di tagliare la vera risposta dalla tua domanda e di incollarla in questo post e contrassegnarla come risposta accettata –