Utilizando maven-shade-plugin, hay una manera de excluir de dependencia (que no es «siempre») y todas sus dependencias transitivas?

Por ejemplo :

<dependencies>

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

    ... other dependencies

</dependencies>

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

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

Los que no funcionan. Todas las dependencias transitivas de com.example:some-artifact se agregan al final de la jarra. Tenga en cuenta que no quiero para establecer el ámbito de com.example:some-artifact a «siempre».

InformationsquelleAutor electrotype | 2015-02-11

2 Comentarios

  1. 8

    Ejecutar «sombra» desde dentro de un perfil, y la marca de su dependencia, como siempre sólo en ese perfil. Por ejemplo:

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

    Cuando se ejecuta mvn -PshadeProfile package va a tratar su dependencia como siempre (y por lo tanto omite sus dependencias), y se utilizará el clasificador de la «sombra» de modo que usted puede utilizar esto como una dependencia en otros módulos.

    • Es importante saber que si usted tiene un no-siempre de dependencia (incluso transitivo) en una de las dependencias transitivas de su «algunos-artefacto», luego de que el artefacto SERÁ incluido por la sombra plugin. Como resultado, a veces esta solución no va a conseguir el efecto deseado.
  2. 4

    He intentado siguiente configuración, y trabajó para mí también:

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

Dejar respuesta

Please enter your comment!
Please enter your name here