2015-11-11 14 views
6

L'unica esperienza Maven che ho include altre librerie quindi ho bisogno di una spiegazione molto semplice su come posso ottenere risultati in Maven con Eclipse.Crea zip in Maven con file aggiuntivi accanto al barattolo

Voglio creare il mio bar regolarmente. Quindi voglio prendere altri 3 file e mettere tutti i file insieme in 1 file zip. Il contenuto del mio zip dovrebbe apparire così:

A.jar 
B.txt 
C.txt 
D.bat 

so che devo inserire determinati obiettivi nel mio file pom.xml. Ho già visto post su Stack Overflow (ad esempio here) su argomenti simili. Ho anche provato la documentazione di Maven come here. Ho già bisogno di qualche plugin Maven o sono ancora roba di Maven-core?

Ma le mie capacità non sono ancora sufficienti per trasferire queste informazioni per il mio caso.

+1

La soluzione è il Maven-assemblaggio-plugin come descritto nella risposta al riferimento (http://stackoverflow.com/questions/5717183/create-a-zip-with-all-dependencies-with-maven). Quello che dovrai fare è includere il plugin maven-assembly-in nel tuo pom.xml e creare un assembly.xml personalizzato in src/main/assemblare. In generale, i set di file in assembly.xml definiscono ciò che verrà incluso nell'archivio creato.Dopo aver chiamato l'installazione di mvn clean, il nuovo archivio zip dovrebbe essere disponibile nella cartella di destinazione dei progetti. Spero che questo aiuti ... –

+0

Il percorso predefinito per un descrittore di assemblaggio è 'src/assembly' ... Vedi https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout. html – khmarbaise

risposta

3

È necessario utilizzare maven-assembly-plugin quando è necessario creare artefatti personalizzati. Consiglio vivamente di leggere Chapter 8. Maven Assemblies del manuale Maven per iniziare a utilizzare gli assembly. Questo capitolo contiene spiegazioni approfondite sulla creazione di assemblaggi Maven ed è facile da leggere.

Fondamentalmente, un assembly viene creato con l'aiuto di un assembly descriptor. Il seguente descrittore di assembly includerà l'artefatto principale del progetto nella radice di un archivio zip. È possibile aggiungere più <file> o <fileSets> dichiarazione qui per aggiungere i tuoi file personalizzati nel vostro archivio (la logica è la stessa)

<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>assemby-id</id> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <files> 
     <file> 
      <source>${project.build.directory}/${project.build.finalName}.${project.packaging}</source> 
      <outputDirectory>/</outputDirectory> 
     </file> 
    </files> 
</assembly> 

Poi basta dichiarare questo plugin in POM. In questo caso, il plugin è associato alla fase package e configurato con il descrittore sopra. Per impostazione predefinita, l'ID dell'assembly viene aggiunto al nome dell'archivio: l'ho rimosso qui.

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.5.5</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
        <descriptor>assembly.xml</descriptor> <!-- path to the descriptor --> 
       </descriptors> 
       <appendAssemblyId>false</appendAssemblyId> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Quando si esegue mvn clean package, si vedrà che un archivio zip sarà stato creato nella directory target.

+0

Non capisco l'utilizzo di variabili di: $ {project.build.directory}/$ {project.build.finalName}. $ {project.packaging} In quale parte si includono i miei file A , B, C e D? –

+1

@BerndErnst le variabili sono qui in modo che la parte sull'arte principale non sia codificata, tutto qui. Per quanto riguarda i file da A a D, come ho detto nella mia risposta, è possibile aggiungere gli elementi '' per ciascun file. Questo dipende dalla struttura della directory in modo da non poter dare una risposta più specifica. – Tunaki

7
+ project 
    + src/main/java 
    + src/main/resources 
    + src/main/config 
      +B.txt 
      +C.txt 
      +D.bat 
    + src/main/assembly 
      +bin.xml 
    +pom.xml 

bin.xml

<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.basedir}/src/main/config</directory> 
     <outputDirectory>/</outputDirectory> 
    </fileSet> 
    <fileSet> 
     <directory>${project.build.directory}</directory> 
     <outputDirectory>/</outputDirectory> 
     <includes> 
     <include>*.jar</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 

poml.xml

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
     <descriptors> 
      <descriptor>src/main/assembly/bin.xml</descriptor> 
     </descriptors> 
     <appendAssemblyId>false</appendAssemblyId> 
    </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> 
     </execution> 
    </executions> 
</plugin> 

uscita: pacchetto pulito mvn

+ artifactId-version.zip 
    + B.txt 
    +C.txt 
    +D.txt 
    +artifactId-version.jar 

Non aggiunto B.txt, C.txt, D.bat in src/main/risorse, perché non è bene avere loro nel CLASSSPATH

Problemi correlati