2013-04-09 7 views
7

Mam projekt poniższego formularzaPrzyspieszenie montaż Maven z wielu modułów

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

chcę projectAssembly do wytworzenia tar.gz, które zawierają dwa foldery, jeden dla Projecta i jeden dla projectB, w w każdym folderze byłyby zależności projektu i biblioteka startupScript.

W "naiwny" sposobem na to jest dodanie assembly.xml plik do każdego projektu, plik, który z grubsza wygląda tak:

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

następnie w projectAssembly zależą <type>tar.gz</type> zarówno projectA i projectB, i dodać plik zespół, który z grubsza wygląda

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

To działa, jednak nie muszę pośredni tar.gz projektów A i B, a ich produkcja, zwłaszcza jeśli mają wiele zależności, zajmuje dużo czasu.

Jak mogę poinformować mavena o bezpośrednim montażu tylko tar.gz z projectAssembly bez marnowania czasu na pakowanie i rozpakowywanie pośrednich archiwów?

+0

Potrzebujesz zależności w projekcie a i b tar.gz? Jeśli nie tylko usuń elementy dependencySets z deskryptora zespołu. – khmarbaise

+0

@khmarbaise, ale jak by się pojawiły w ostatnim tar.gz stworzonym przez 'assemblyProject'? – mikebloch

+0

Cześć! Którą wersję Maven używasz? – Jan

Odpowiedz

1

Twój deskryptor montaż w projectAssembly musi wyglądać następująco (patrz komentarze wewnątrz):

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

Uważam, że byłoby to, czego potrzebujesz. Jeśli nie daj nam znać ..