maven-shade-plugin:排除依赖关系及其所有​​传递依赖关系

ele*_*ype 7 java maven 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>
Run Code Online (Sandbox Code Playgroud)

和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>
Run Code Online (Sandbox Code Playgroud)

或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>
Run Code Online (Sandbox Code Playgroud)

那些不起作用.所有传递依赖com.example:some-artifact都被添加到最终的jar中.请注意,我不想将范围设置com.example:some-artifact为"提供".

dcs*_*ohl 11

从配置文件中运行"shade",并将您的依赖关系标记为仅在该配置文件中提供.例如:

<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>
Run Code Online (Sandbox Code Playgroud)

当你运行mvn -PshadeProfile package它时会将你的依赖关系视为提供(因此省略它的依赖关系),它将使用分类器"shaded",这样你就可以将它用作其他模块中的依赖项.

  • 重要的是要知道如果你的"some-artifact"的一个传递依赖关系中有一个非提供的依赖项(甚至是一个传递的依赖项),那么该工件将被shade插件包含在内.结果,有时这种解决方案不会达到预期的效果. (2认同)

naz*_*art 5

我尝试了以下配置,它也对我有用:

<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>
Run Code Online (Sandbox Code Playgroud)