2013-04-09 12 views
7

Ich bin ein Projekt in der folgenden Form ein tar.gz produzierenSpeeding up Maven Montage mehrerer Module

- pom.xml 
- projectA 
    - pom.xml 
    - src/main/ 
    - java 
    - startupScript 
- projectB 
    - pom.xml 
    - src/main/ 
    - java 
    - startupScript 
- projectAssembly 
    - pom.xml 

Ich möchte projectAssembly hat, die zwei Ordner ein für projectA und eine für ProjectB enthalten würde, in Jeder Ordner würde Projektabhängigkeiten und die startupScript Bibliothek enthalten.

Die „naive“ Art und Weise zu tun, ist assembly.xml Datei zu jedem Projekt hinzuzufügen, eine Datei, die wie grob aussieht:

<assembly> 
<formats> 
    <format>tar.gz</format> 
</formats> 
<baseDirectory>/${project.artifactId}</baseDirectory> 
<fileSets> 
    <fileSet> 
     <directory>${basedir}/src/main/startupScripts</directory> 
     <outputDirectory>/startupScripts</outputDirectory> 
    </fileSet> 
</fileSets> 
<dependencySets> 
    <dependencySet> 
     <outputDirectory>/lib</outputDirectory> 
    </dependencySet> 
</dependencySets> 
</assembly> 

Dann wurde in den projectAssembly, hängt von <type>tar.gz</type> sowohl von projectA und projectB, und eine Baugruppendatei hinzufügen, die in etwa sieht aus wie

<assembly> 
<dependencySets> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <unpack>true</unpack> 
    </dependencySet> 
</dependencySets> 
</assembly> 

Dies funktioniert aber ich brauche nicht die Zwischen tar.gz von Projekten A und B, und sie zu produzieren, vor allem, wenn sie viele Abhängigkeiten haben, dauert eine lange Zeit.

Wie kann ich Maven direkt Assembly nur die tar.gz von projectAssembly ohne verschwenden Zeiten beim Packen und Entpacken von Zwischenarchiven zu sagen?

+0

Brauchen Sie die Abhängigkeiten in der Projekt a und b tar.gz Datei? Entfernen Sie nicht nur die dependencySets aus dem Assembly-Deskriptor. – khmarbaise

+0

@khmarbaise aber wie würden sie in der endgültigen tar.gz erscheinen, die von 'assemblyProject' erstellt wurde? – mikebloch

+0

Hallo zusammen! Welche Maven Version verwendest du? – Jan

Antwort

1

Ihr Assembly Descriptor in der projectAssembly braucht etwas wie folgt aussehen (siehe Kommentare innen):

<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>bin</id> 
<formats> 
    <format>dir</format> 
</formats> 
<includeBaseDirectory>false</includeBaseDirectory> 
<moduleSets> 
    <moduleSet> 

    <!-- Enable access to all projects in the current multimodule build! --> 
    <useAllReactorProjects>true</useAllReactorProjects> 

    <!-- Now, select which projects to include in this module-set. --> 
    <includes> 
     <include>*:projectA</include> 
     <include>*:projectB</include> 
    </includes> 

    <!-- Select and map resources from each module --> 
    <sources> 
     <includeModuleDirectory>false</includeModuleDirectory> 
     <fileSets> 
     <fileSet> 
      <directory>src/main/startupScript</directory> 
      <outputDirectory>${module.artifactId}/startupScript</outputDirectory> 
     </fileSet> 
     </fileSets> 
    </sources> 

    <!-- Select and map dependencies from each module --> 
    <binaries> 
     <dependencySets> 
     <dependencySet> 
      <outputDirectory>${module.artifactId}/lib</outputDirectory> 
     </dependencySet> 
     </dependencySets> 
    </binaries> 
    </moduleSet> 
</moduleSets> 
</assembly> 

Ich glaube, das wäre, was Sie brauchen. Wenn nicht, lass es uns wissen ..

Verwandte Themen