2015-11-11 5 views
6

Die einzige Erfahrung, die Maven mit anderen Bibliotheken hat, ist, dass ich eine sehr einfache Erklärung benötige, wie ich mit Eclipse Dinge in Maven erreichen kann.Erstelle Zip in Maven mit zusätzlichen Dateien neben dem Glas

Ich möchte mein Glas regelmäßig erstellen. Dann möchte ich 3 weitere Dateien nehmen und alle Dateien in 1 Zip-Datei zusammenfassen. Der Inhalt meiner Reißverschluss sollte wie folgt aussehen:

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

Ich weiß, dass ich bestimmte Ziele in meiner pom.xml Datei einfügen müssen. Ich habe bereits Beiträge zu Stack Overflow (d. H. here) zu ähnlichen Themen gesehen. Ich habe auch die Maven-Dokumentation wie here versucht. Brauche ich schon irgendwelche Maven-Plugins oder sind sie noch Maven-Core-Sachen?

Aber meine Fähigkeiten sind noch nicht genug, um diese Informationen für meinen Fall zu übertragen.

+1

Die Lösung ist die Maven-Montage-Plugin als beschrieben in der Antwort auf die referenzierte (http://stackoverflow.com/questions/5717183/create-a-zip-with-all-dependencies-with-maven). Was Sie tun müssen, ist das maven-assembly-plugin in Ihre pom.xml einzufügen und eine eigene assembly.xml in src/main/assemble zu erstellen. Im Allgemeinen definieren die Dateigruppen in der assembly.xml, was in dem erstellten Archiv enthalten sein wird.Nach dem Aufruf von mvn clean install sollte das neue Zip-Archiv im Zielordner Ihres Projekts verfügbar sein. Hoffe, dass hilft ... –

+0

Der Standard-Speicherort für eine Assembly-Descriptor ist 'src/assembly' ... Siehe https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout. html – khmarbaise

Antwort

3

Sie müssen die maven-assembly-plugin verwenden, wenn Sie benutzerdefinierte Artefakte erstellen müssen. Ich schlage vor, dass Sie Chapter 8. Maven Assemblies des Buches Maven lesen, um mit der Verwendung von Baugruppen zu beginnen. Dieses Kapitel enthält ausführliche Erläuterungen zur Erstellung von Maven-Assemblys und ist leicht zu lesen.

Grundsätzlich wird eine Baugruppe mit Hilfe einer assembly descriptor erstellt. Der folgende Assembly-Deskriptor enthält das Hauptartefakt des Projekts im Stammverzeichnis eines Zip-Archivs. Sie können mehr <file> oder <fileSets> Erklärung hier fügen Sie Ihre benutzerdefinierten Dateien in Ihrem Archiv hinzufügen (die Logik ist die gleiche)

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

Dann brauchen Sie nur dieses Plugin in Ihrem POM zu erklären. In diesem Fall ist das Plugin an die package Phase gebunden und mit dem obigen Deskriptor konfiguriert. Standardmäßig wird die Assembly-ID an den Namen des Archivs angehängt: Ich habe es hier entfernt.

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

Wenn mvn clean package läuft, sehen Sie, dass ein Zip-Archiv im target Verzeichnis erstellt wurden, werden.

+0

Ich verstehe nicht die Verwendung von Variablen von: $ {project.build.directory}/$ {project.build.finalName}. $ {project.packaging} In welchen Teil enthalten Sie meine Dateien A , B, C und D? –

+1

@BerndErnst die Variablen sind hier, so dass der Teil zum Hauptartefakt nicht fest codiert ist, das ist alles. Bezüglich der Dateien A bis D, wie ich in meiner Antwort sagte, können Sie für jede Datei '' Elemente hinzufügen. Dies hängt von Ihrer Verzeichnisstruktur ab, daher kann ich keine spezifischere Antwort geben. – 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> 

Ausgang: mvn sauber Paket

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

Nicht B.txt, C.txt, D.bat in src/main/resources hinzugefügt, weil es nicht gut ist, sie in der CLASSSPATH zu haben