2013-07-24 41 views
12

Do tej pory używałem wtyczki maven assembly do generowania dwóch JARów dla każdego artefaktu - skompilowanych źródeł i zależności - powodem było to proste - wdrażanie tylko skompilowanych źródeł w sieci jest znacznie szybsze niż wdrażanie all-in-one-JAR z 40 MB danych.Wtyczka Maven Shade do produkcji dwóch słoików

Z powodu nadpisania wewnętrznych plików musiałem zmienić wtyczkę maven shade, aby móc korzystać z funkcji <transformers>. Jednak jestem w stanie zarządzać, aby uruchomić zarówno z dwóch wykonaniach:

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>shade-libs</id> 
     <phase>package</phase> 
     <goals> 
      <goal>shade</goal> 
     </goals> 
     <configuration> 
      <outputFile>target/assembly/${project.artifactId}-libs.jar</outputFile> 
      <artifactSet> 
      <excludes> 
       <exclude>...</exclude> 
      </excludes> 
      </artifactSet> 
      <transformers> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
       <resource>META-INF/spring.handlers</resource> 
      </transformer> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
       <resource>META-INF/spring.schemas</resource> 
      </transformer> 
      </transformers> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>shade-main</id> 
     <phase>package</phase> 
     <goals> 
      <goal>shade</goal> 
     </goals> 
     <configuration> 
      <outputFile>target/assembly/${project.artifactId}.jar</outputFile> 
      <artifactSet> 
      <includes> 
       <include>...</include> 
      </includes> 
      </artifactSet> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

Kiedy biegnę mvn package, tylko druga egzekucja jest prowadzona. Pierwszy jest zawsze ignorowany. Dzięki wtyczce do instalacji maven działało idealnie.

Oczywiście rozwiązaniem może być użycie jednocześnie wtyczki zespołu i cienia, ale chciałbym znaleźć bardziej spójne rozwiązanie.

+2

Zamiast dwukrotnie definiować wtyczkę, czy próbowałeś zdefiniować drugie 'wykonanie' w ramach jednej definicji wtyczki? – DB5

+0

Jeśli zarejestrujesz to jako odpowiedź, zaakceptuję to. –

+0

Dzięki, zrobiliśmy to teraz. Cieszę się, że to rozwiązało twój problem. – DB5

Odpowiedz

21

Zamiast podwójnego definiowania wtyczki, po prostu zdefiniuj go raz, ale z dwoma sekcjami execution. Tak więc w twojej sytuacji byłoby:

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>shade-libs</id> 
     <phase>package</phase> 
     <goals> 
      <goal>shade</goal> 
     </goals> 
     <configuration> 
      <outputFile>target/assembly/${project.artifactId}-libs.jar</outputFile> 
      <artifactSet> 
      <excludes> 
       <exclude>...</exclude> 
      </excludes> 
      </artifactSet> 
      <transformers> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
       <resource>META-INF/spring.handlers</resource> 
      </transformer> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
       <resource>META-INF/spring.schemas</resource> 
      </transformer> 
      </transformers> 
     </configuration> 
     </execution> 
     <execution> 
     <id>shade-main</id> 
     <phase>package</phase> 
     <goals> 
      <goal>shade</goal> 
     </goals> 
     <configuration> 
      <outputFile>target/assembly/${project.artifactId}.jar</outputFile> 
      <artifactSet> 
      <includes> 
       <include>...</include> 
      </includes> 
      </artifactSet> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</plugins>