2009-12-13 16 views
15

Mam projektu Maven2 z kilku modułów słój, budowania projektu dostanie .jar archiwa dla każdego modułu w modułach katalogu/XYZ/target/XYZ-xxxjarJak połączyć słoiki modułów z jednym słojem w Maven2?

Teraz, jeśli mój projekt P jest od wersji Pp .qr, i chcę wygenerować pojedynczy jar Pp.qr-all.jar z wszystkimi podmodułami zawartymi w, jak mam to zrobić?

Odpowiedz

18

Co chcesz osiągnąć nazywa się uber słoik. Ten moduł musi mieć zależność od wszystkich innych submodułów, które chcesz spakować do jednego słoika. Jeśli utworzysz kolejny moduł, który wytworzy pożądany artefakt, będzie można go zbudować w reaktorze ze wszystkimi jego zależnościami, ale jeśli będzie to osobny projekt, musisz zainstalować wszystkie zależne od niego pliki JAR.

| parent 
| -- submodule1 
... 
| -- submoduleN 
| -- uberjarSubmodule 

Uber słoik może być wykonane za pomocą:

  1. maven-shade-plugin - w twoim przypadku trzeba pamiętać, aby wykluczyć przechodnie dependecies ze swoimi modułami

    <project> 
    ... 
    <build> 
    <plugins> 
        <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-shade-plugin</artifactId> 
        <version>1.2.2</version> 
        <executions> 
         <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <artifactSet> 
          <excludes> 
           <exclude>classworlds:classworlds</exclude> 
           <exclude>junit:junit</exclude> 
           <exclude>jmock:jmock</exclude> 
           <exclude>xml-apis:xml-apis</exclude> 
          </excludes> 
          </artifactSet> 
         </configuration> 
         </execution> 
        </executions> 
        </plugin> 
    </plugins> 
    </build> 
    ... 
    </project> 
    
  2. maven-assembly-plugin - w this pytanie znajdziesz szczegółową odpowiedź

+0

odcień wygląda jak fajna wtyczka. – Clinton

1

W zależności od tego, w jaki sposób zamierzasz wysłać tę skrzynkę, jeśli twój jar jest biblioteką, którą inni programiści mają pobrać i używać za pośrednictwem programu maven. Powinieneś określić te jako dependencies w projektach pom.

Jeśli próbujesz wysłać coś do użytkownika końcowego, który po prostu chce pobrać plik binarny i użyć projektu, możesz spróbować użyć wtyczki assembly, aby spakować swój projekt. Za pomocą tej wtyczki można spakować słoik wraz z jego zależnościami. Nie umieszcza tego wszystkiego w jednym pliku jar, ale zakładając, że poprawnie skonfigurowałeś ścieżkę klasy użytkowników, nie powinno to mieć znaczenia.

Powiązane problemy