2011-10-20 9 views
39

Supponiamo che io debba gestire un artefatto che consiste in una cartella/struttura di file aritmetici arrotolata come archivio zip. Non mi è chiaro come ottenere ciò a Maven in un modo che si adatta meglio alla "via dei Maven".Maven best practice per la creazione di artefatti zip ad hoc

So che non esiste un tipo di imballaggio "zip". Questo significa che non c'è un ciclo di vita generico in Maven per prendere semplicemente quello che ho nella cartella delle risorse, comprimerlo e installarlo/distribuirlo nei miei repository?

Sto cercando opzioni, con una valutazione di come ciascuna opzione soddisfi il mio requisito di seguire la via del giudizio, poiché non desidero incorrere nell'ovvia penalità di allontanarmi dal sentiero d'oro. . .

+0

Si può fare senza un 'classificatore' qui: https://stackoverflow.com/questions/25078028/how-to-create-zip-target-instead-of-jar-in-maven – Adam

risposta

52

Decidere quale classificatore si utilizzerà per il file zip, per ragioni si supponga che sia sample.

Nel progetto Crea file assembly/sample.xml

Compilare assembly/sample.xml con qualcosa di simile:

<?xml version="1.0" encoding="UTF-8"?> 
<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
    http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 
     http://maven.apache.org/xsd/assembly-1.1.2.xsd" 
> 
    <id>sample</id> 
    <formats> 
    <format>zip</format> 
    </formats> 
    <fileSets> 
    <fileSet> 
     <outputDirectory>/</outputDirectory> 
     <directory>some/directory/in/your/project</directory> 
    </fileSet> 
    </fileSets> 
    <!-- use this section if you want to package dependencies --> 
    <dependencySets> 
    <dependencySet> 
     <outputDirectory>lib</outputDirectory> 
     <excludes> 
     <exclude>*:pom</exclude> 
     </excludes> 
     <useStrictFiltering>true</useStrictFiltering> 
     <useProjectArtifact>false</useProjectArtifact> 
     <scope>runtime</scope> 
    </dependencySet> 
    </dependencySets> 
</assembly> 

Aggiungi questo al build sezione del pom

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>create-distribution</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
       <descriptor>assembly/sample.xml</descriptor> 
       </descriptors> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 

Di conseguenza si deve creare e installare you-project-name-VERSION-sample.zip.

vi suggerisco di leggere il capitolo sulle assemblee dal libro Maven di Sonatype: https://books.sonatype.com/mvnref-book/reference/assemblies.html

Inoltre, leggere specifica del formato di montaggio: http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

+2

Ma quale pacchetto il tipo g sarebbe più appropriato da usare nel pom? O dovresti semplicemente usare il default (java) anche se non c'è alcuna sorgente Java. – William

+10

@William. Se non è associato alcun codice Java al progetto, utilizzare pom

0

, compili il montaggio/sample.xml con qualcosa di simile:

<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>install</id> 
    <baseDirectory>/</baseDirectory> 
    <formats> 
    <format>zip</format> 
</formats> 
<fileSets> 
    <fileSet> 
    <includes> 
     <include>README*</include> 
     <include>*.sh</include> 
    </includes> 
    </fileSet> 
    <fileSet> 
    <directory>target/classes/</directory> 
    <outputDirectory>resources</outputDirectory> 
    <includes> 
     <include>*.properties</include> 
     <include>*.xml</include> 
    </includes> 
    <lineEnding>dos</lineEnding> 
    </fileSet> 
    <!-- 
    <fileSet> 
    <directory>target/</directory> 
    <outputDirectory>lib</outputDirectory> 
    <includes> 
     <include>*.jar</include> 
    </includes> 
    <lineEnding>dos</lineEnding> 
    </fileSet> 
    --> 
</fileSets> 
<!-- use this section if you want to package dependencies --> 
    <dependencySets> 
    <dependencySet> 
     <outputDirectory>lib</outputDirectory> 
     <excludes> 
     <exclude>*:pom</exclude> 
     </excludes> 
     <useStrictFiltering>true</useStrictFiltering> 
     <useProjectArtifact>true</useProjectArtifact> 
     <scope>runtime</scope> 
    </dependencySet> 
    </dependencySets> 
</assembly> 

aggiungere i seguenti codici nel file pom.xml. comanda

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <descriptor>assembly/sample.xml</descriptor> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

Esegui come mvn package -P dev -Dmaven.test.skip

creerà i file zip che includono: xxxx.zip -LIB/.jar -Risorse/ XML/proprietà -readme -start. sh

+0

Domanda già risposta. Non porti alcuna informazione aggiuntiva. – lpratlong

Problemi correlati