2010-03-25 23 views
25

Desidero creare un archivio zip della mia directory "target" ($ {project.build.directory). usare il plugin maven-assembly-mi sembra eccessivo per un compito così semplice (e un po 'complicato - perché devo usare un altro file, il descrittore dell'assemblaggio, per tale compito) Non riesco a trovare l'apparentemente più semplice maven-zip-plugin nel repository http://repo1.maven.org/maven2.Creazione di un archivio zip della directory "target" di prova

Qualsiasi input?

risposta

47

Se il bin predefinito descrittore di assemblaggio non soddisfa le tue esigenze, allora si hanno tre opzioni:

  1. Uso del Maven-assemblaggio-plugin - The Maven-zip-plugin non è mai venuto fuori perché il plugin di montaggio può fare tutto ciò che stava facendo il plugin zip, e altro ancora, vedere MNG-2243.
  2. Utilizzo del plug-in maven-antrun (e forse il plugin build-helper-per allegare lo zip) - Esiste un esempio here (e questo aspetto è più dettagliato del plug-in di assembly alla fine).
  3. Scrittura del proprio plug-in: perché dovresti farlo quando hai il plug-in di assembly.

Personalmente, vorrei solo usare il Maven-assemblaggio-plugin con il seguente zip.xml descrittore:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
    <id>bin</id> 
    <baseDirectory>/</baseDirectory> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
     <directory>${project.build.directory}</directory> 
    </fileSet> 
    </fileSets> 
</assembly> 

E nel tuo POM:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <descriptors> 
     <descriptor>src/main/assembly/zip.xml</descriptor> 
    </descriptors> 
    </configuration> 
    <executions> 
    <execution> 
     <id>make-assembly</id> <!-- this is used for inheritance merges --> 
     <phase>package</phase> <!-- append to the packaging phase. --> 
     <goals> 
     <goal>single</goal> <!-- goals == mojos --> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 
+0

Non funziona - il "bin" integrato è Usato. E non riesco a capire come puntare a non-built-in personalizzato. –

+0

C'è un vantaggio dell'uso del plug-in di antrun sul plug-in di assemblaggio poiché memorizza le dimensioni del file in modo diverso all'interno dello zip.Se stai leggendo lo zip con 'ZipInputStream' e usi 'getSize()' otterrai la dimensione della voce con le zip create da antrun, per le zips create con assembly restituisce -1. –

11

Se non si hanno esigenze "speciali" per il file .zip generato, è possibile utilizzare uno dei descrittori di Maven Assembly predefiniti. I descrittori di assiemi predefiniti semplificano la creazione rapida e semplice di assiemi specifici senza dover fornire il proprio descrittore di assiemi. Si supponga di voler utilizzare il descrittore predefinito bin. Quindi, nella sezione plugins della sezione build del POM, è sufficiente aggiungere quanto segue.

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
    <descriptorRefs> 
     <descriptorRef>bin</descriptorRef> 
    </descriptorRefs> 
    </configuration> 
</plugin> 

Naturalmente, come sempre con Maven, se si vuole fare qualcosa che va oltre la configurazione di default, dovrete creare la propria configurazione, e in questo caso, significa che il proprio descrittore di assemblaggio.

L'elenco dei descrittori predefiniti è documentato here.

+0

Non cattive opzioni. Eppure alla fine del mio processo la directory di destinazione contiene semplicemente un file exe e una directory con altri file exe - tutti gli installatori. Desidero semplicemente comprimerle tutte insieme – Yaneeve

+0

Quindi il tuo problema è che i descrittori predefiniti impaccheranno più del necessario, come il contenuto delle cartelle di lavoro, ecc.? È il caso che ci sia una cartella specifica sotto la destinazione che vuoi impacchettata (ad esempio '$ {project.build.directory}/installers') ma vuoi che le altre directory vengano omesse? O hai qualche altro obiettivo? – RTBarnard

+0

Ho eliminato tutti i file e le directory indesiderati dalla directory $ {project.build.directory} e desidero semplicemente comprimere completamente i suoi contenuti. Se non hai un suggerimento migliore di quello di Pascal immagino che dovrò solo creare quel file assembly "ridondante" come ha mostrato e optare per la sua soluzione ... – Yaneeve

Problemi correlati