You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven中如何排除所有传递依赖仅保留指定集合?

Maven 排除所有传递依赖,仅保留指定依赖的实现方法

方法1:给每个依赖添加全局排除

直接在需要保留的每个依赖中,添加排除所有传递依赖的规则,确保该依赖的所有间接依赖都被完全排除,项目仅保留你显式声明的依赖本身。

示例配置:

<dependencies>
    <!-- 仅保留该依赖本身,排除所有传递依赖 -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>32.1.3-jre</version>
        <exclusions>
            <exclusion>
                <groupId>*</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- 其他需要保留的依赖同理配置 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.14.0</version>
        <exclusions>
            <exclusion>
                <groupId>*</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

方法2:通过dependencyManagement统一配置全局排除

如果项目依赖较多,逐个添加排除规则太繁琐,可以在dependencyManagement中定义全局排除规则,让所有依赖自动继承该配置,一次性排除所有传递依赖。

示例配置:

<dependencyManagement>
    <dependencies>
        <!-- 全局规则:排除所有依赖的传递依赖 -->
        <dependency>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- 直接声明需要保留的依赖,自动应用全局排除规则 -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>32.1.3-jre</version>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.14.0</version>
    </dependency>
</dependencies>

若某个依赖确实需要保留特定传递依赖,只需将该传递依赖显式声明到<dependencies>中即可,Maven会优先使用显式声明的依赖。

方法3:用maven-enforcer-plugin强制校验

为避免意外引入未声明的传递依赖,可使用maven-enforcer-plugin添加校验规则,一旦发现未显式声明的依赖,构建会直接报错,确保依赖完全可控。

示例配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <version>3.3.0</version>
            <executions>
                <execution>
                    <id>block-transitive-deps</id>
                    <goals>
                        <goal>enforce</goal>
                    </goals>
                    <configuration>
                        <rules>
                            <banTransitiveDependencies>
                                <message>禁止引入未显式声明的传递依赖,请检查依赖树</message>
                            </banTransitiveDependencies>
                        </rules>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

你可以执行mvn dependency:tree命令查看项目依赖树,确认所有传递依赖已被排除,仅保留指定的依赖集合。

内容的提问来源于stack exchange,提问作者Petersaber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 14:52:49