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
相关产品推荐
相关产品推荐

