2015-02-11 2 views
3

Использование maven-shade-plugin, есть ли способ исключить зависимость (которая не предоставляется) и все ее транзитивные зависимости?maven-shade-plugin: исключить зависимость и все ее транзитивные зависимости

Например:

<dependencies> 

    <dependency> 
     <groupId>com.example</groupId> 
     <artifactId>some-artifact</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
    </dependency> 

    ... other dependencies 

</dependencies> 

и 1)

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <artifactSet> 
        <includes> 
         <include>*:*</include> 
        </includes> 
        <excludes> 
         <exclude>com.example:some-artifact</exclude> 
        </excludes> 
       </artifactSet> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

или 2)

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.3</version> 
      <configuration> 
       <artifactSet> 
        <includes> 
         <include>*:*</include> 
        </includes> 
       </artifactSet> 
       <filters> 
        <filter> 
         <artifact>com.example:some-artifact</artifact> 
         <excludes> 
          <exclude>**</exclude> 
         </excludes> 
        </filter> 
       </filters> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Те не работают. Все транзитивные зависимости от com.example:some-artifact добавляются в последнюю банку. Обратите внимание, что я не хочу устанавливать область com.example:some-artifact на «предоставленный».

ответ

5

Запустите «тень» из профиля и отметьте свою зависимость, как предусмотрено только в этом профиле. Например:

<profiles> 
    <profile> 
     <id>shadeProfile</id> 
     <dependencies> 
      <dependency> 
       <groupId>com.example</groupId> 
       <artifactId>some-artifact</artifactId> 
       <version>1.23</version> 
       <scope>provided</scope> 
      </dependency> 
     </dependencies> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-shade-plugin</artifactId> 
        <version>2.3</version> 
        <executions> 
         <execution> 
          <phase>package</phase> 
          <goals> 
           <goal>shade</goal> 
          </goals> 
          <configuration> 
           <shadedClassifierName>shaded</shadedClassifierName> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

При запуске mvn -PshadeProfile package он будет относиться к вашей зависимости, как это предусмотрено (и, таким образом, опускают его зависимость), и он будет использовать классификатор «затененный», так что вы можете использовать это как зависимость в других модулях.

+0

Это важно знать, что если у вас есть не-при условии, зависимость (даже переходную один) на одном из переходных зависимостей вашего " некоторый-артефакт ", то этот артефакт будет включен плагином тени. В результате иногда это решение не достигнет желаемого эффекта. – Shannon

0

Я попытался следующие конфигурации, и он работал на меня также:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>3.1.0</version> 

      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
       </execution> 
      </executions> 

      <configuration> 
       <finalName>client-${artifactId}</finalName> 

       <filters> 
        <filter> 
         <artifact>*:*</artifact> 
         <excludes> 
          <exclude>META-INF/*</exclude> 
         </excludes> 
        </filter> 
       </filters> 

       <artifactSet> 
        <excludes> 
         <exclude>org.apache.jmeter:*</exclude> 
         <exclude>com.fasterxml.jackson.core:jackson-databind:*</exclude> 
         <exclude>com.fasterxml.jackson.module:jackson-module-scala_2.11:*</exclude> 
        </excludes> 
       </artifactSet> 
      </configuration> 
     </plugin> 
Смежные вопросы