2013-07-24 25 views
12

Şimdiye kadar, maven derleme eklentisini kullanarak, her yapay nesne için kaynak kodları ve bağımlılıklar için iki JAR üretmek zorunda kaldım. Bunun nedeni, basitçe, ağ üzerinden derlenen kaynakları dağıtmaktan çok daha hızlıdır. 40 MB veri içeren all-in-one-JAR.Maven Shade İki Kavanoz Üreten Eklenti

İç dosyaların üzerine yazılması nedeniyle, <transformers> özelliğini kullanabilmek için maven gölgesi eklentisini değiştirmek zorunda kaldım. Ancak iki infaz ikisi çalıştırmak yönetmek alamıyorum:

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

Ben mvn package çalıştırmak

, sadece ikinci yürütme çalıştırılır. İlki daima göz ardı edilir. Maven montaj eklentisi ile mükemmel çalıştı.

Elbette çözüm hem montaj hem de gölge eklentisini aynı anda kullanmak olabilir, ancak daha tutarlı bir çözüm bulmak istiyorum.

+2

Eklentiyi iki kez tanımlamak yerine, yerine tek bir eklenti tanımı içinde ikinci bir 'yürütme 'tanımlamayı denediniz mi? – DB5

+0

Yanıt olarak gönderirseniz, kabul edeceğim. –

+0

Teşekkürler, bunu şimdi yaptık. Sorunu çözdüğünü duyduğuma sevindim. – DB5

cevap

21

Eklentiyi iki kez tanımlamak yerine, onu bir kez ancak iki adet execution bölümüyle tanımlayın. Durumunuza göre:

<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> 
İlgili konular