2010-04-23 14 views
10

Mam projekt wielomodułowy i chcę utworzyć pojedynczy słoik zawierający klasy wszystkich moich modułów. Wewnątrz mojego macierzystego POM, oświadczyłem następujące wtyczki:maven: wielomodułowy montaż projektu w pojedynczy słoik

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-assembly-plugin</artifactId> 
<configuration> 
    <descriptorRefs> 
    <descriptorRef>bin</descriptorRef> 
    </descriptorRefs> 
</configuration> 
</plugin> 

Jednak, gdy uruchomiony mvn montaż: montaż, tylko źródło z folderu nadrzędnego (pusty) są włączone. Jak umieścić źródła z moich modułów w archiwum?

+0

znaleźliście drogę? – aurelius

Odpowiedz

0

Wstępnie zdefiniowany bin nie rozwiąże problemu. Będziesz musiał użyć niestandardowego deskryptora podobnego do predefiniowanego deskryptora bin, ale deklaruje on, że moduleSet ma zawierać moduły projektu.

6

myślę szukasz cieniu Plugin Maven:

http://maven.apache.org/plugins/maven-shade-plugin/index.html

Pakiety up dowolną liczbę zależnościami w produkt depenency pakietu uber. Następnie można go wdrożyć w repozytorium.

+0

Dodanie projektu podrzędnego w zależności od innych projektów podrzędnych (upewnij się, że wszystkie są uwzględnione) rozwiązało problem. Deklaracja cienia: wykonanie cienia w projekcie podrzędnym, skonfigurowane za pomocą jednego uwzględnienia dla wszystkich artefaktów w grupie wielomodułowej. Więcej informacji można znaleźć na stronie http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html. –

1

pakować zajęcia ze wszystkich modułów do jednego słoika robiłam następujące:

  1. utworzono dodatkowy moduł, który jest używany tylko do pakowania zawartość wszystkich pozostałych modułów do jednego słoika. Zwykle jest to określane jako moduł złożeniowy . Spróbuj wywołać ten moduł tak samo jak docelowy plik jar.

  2. W pom.xml tego nowego modułu dodałem wtyczkę maven-assemby. Wtyczka ta pakuje wszystkie klasy i umieszcza je w jednym pliku. Wykorzystuje dodatkowy plik konfiguracyjny (krok 4)

<build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.4</version> 
     <executions> 
      <execution> 
      <id>go-framework-assemby</id> 
      <phase>package</phase><!-- create assembly in package phase (invoke 'single' goal on assemby plugin)--> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
       <descriptor>src/main/assemble/framework_bin.xml</descriptor> 
       </descriptors> 
        <finalName>framework</finalName> 
        <appendAssemblyId>false</appendAssemblyId> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 

3.W pom.xml tego nowego modułu, że dodaje się również zależności do innych modułów, w tym macierzystego POM. Tylko moduły zawarte w zależnościach będą spakowane w docelowym pliku jar.

<dependencies> 
    <dependency> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>fwk-bam</artifactId> 
     <version>${project.version}</version> 
    </dependency>... 

4.Finally stworzyłem deskryptor montażu w module montażowym (plik: src/main/montaż/framework_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>all-jar</id> 
    <formats> 
     <format>jar</format> <!-- the result is a jar file --> 
    </formats> 

    <includeBaseDirectory>false</includeBaseDirectory> <!-- strip the module prefixes --> 

    <dependencySets> 
     <dependencySet> 
      <unpack>true</unpack> <!-- unpack , then repack the jars --> 
      <useTransitiveDependencies>false</useTransitiveDependencies> <!-- do not pull in any transitive dependencies --> 
     </dependencySet> 
    </dependencySets> 
</assembly> 
Powiązane problemy