Gradle全局依赖排除配置如何跳过指定单个子项目
解决方案
有两种常用实现方式,你可以根据自己的项目情况选择:
方案1:修改根项目全局配置,主动跳过指定子项目(更推荐)
你可以在根项目的subprojects配置块中增加项目判断逻辑,仅对非例外的子项目应用排除规则。假设你要排除的特殊子项目路径为:demo:special-service,你可以把根项目的配置修改为如下形式:
subprojects { project -> // 跳过指定的特殊子项目,不应用全局排除规则 if (project.path != ':demo:special-service') { configurations { all { exclude module: 'slf4j-log4j12' exclude module: 'slf4j-log4j-impl' } } } }
如果需要匹配多个例外子项目,你也可以把例外项目路径放到集合里判断:
def excludeProjects = [':demo:special-service', ':demo:legacy-service'] subprojects { project -> if (!excludeProjects.contains(project.path)) { configurations { all { exclude module: 'slf4j-log4j12' exclude module: 'slf4j-log4j-impl' } } } }
方案2:在特殊子项目中强制引入被全局排除的模块
如果你不想修改根项目的现有配置,也可以直接在例外子项目的build.gradle中,强制引入已经被全局排除的模块,只需要在依赖声明时增加force = true配置即可:
dependencies { // 强制引入被全局排除的模块,优先级高于根项目的排除规则 implementation('org.slf4j:slf4j-log4j12:1.7.36') { force = true } implementation('org.slf4j:slf4j-log4j-impl:2.0.7') { force = true } }
注意:该方案需要你手动指定对应模块的版本号,且仅对当前子项目生效。
内容的提问来源于stack exchange,提问作者Matthew Layton
相关产品推荐
相关产品推荐

