Gradle依赖排除

在引用依赖时经常会有这样的问题:某些间接引用的依赖项是不需要的;产生了依赖冲突。此时需要排除一些依赖。

下面的内容介绍了几种在gradle中排除依赖的方式。

在dependency中排除

 

 

1

2

3

4

5

6

7

8

dependencies {

compile('com.zhyea:ar4j:1.0') {

//excluding a particular transitive dependency:

exclude module: 'cglib' //by artifact name

exclude group: 'org.jmock' //by group

exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group

}

}

这种方式是粒度最细的,也是最为繁琐的。此时可以考虑全局设置。

在全局配置中排除

全局配置是在configuration中完成的。

 

1

2

3

4

configurations {

compile.exclude module: 'cglib'

all*.exclude group:'org.unwanted', module: 'iAmBuggy'

}

 

禁用传递依赖

禁用传递依赖需要将属性transitive设置为false。可以在dependency中禁用传递依赖,也可以在configuration中全局禁用:

 

1

2

3

4

5

6

7

compile('com.zhyea:ar4j:1.0') {

transitive = false

}

 

configurations.all {

transitive = false

}

还可以在单个依赖项中使用@jar标识符忽略传递依赖:

 

1

compile 'com.zhyea:ar4j:1.0@jar'

 

强制使用某个版本

如果某个依赖项是必需的,而又存在依赖冲突时,此时没必要逐个进行排除,可以使用force属性标识需要进行依赖统一。当然这也是可以全局配置的:

 

1

2

3

4

5

6

7

8

9

compile('com.zhyea:ar4j:1.0') {

force = true

}

 

configurations.all {

resolutionStrategy {

force 'org.hamcrest:hamcrest-core:1.3'

}

}

 

在打包时排除依赖

先看一个示例:

 

1

2

3

4

5

6

7

8

9

10

11

task zip(type: Zip) {

    into('lib') {

        from(configurations.runtime) {

            exclude '*unwanted*', '*log*'

        }

    }

    into('') {

        from jar

        from 'doc'

    }

}

代码表示在打zip包的时候会过滤掉名称中包含“unwanted”和“log”的jar包。这里调用的exclude方法的参数和前面的例子不太一样,前面的参数多是map结构,这里则是一个正则表达式字符串。

也可以使用在打包时调用include方法选择只打包某些需要的依赖项:

 

1

2

3

4

5

6

7

8

9

10

11

task zip(type: Zip) {

    into('lib') {

        from(configurations.runtime) {

            include '*ar4j*', '*spring*'

        }

    }

    into('') {

        from jar

        from 'doc'

    }

}

 

始终选择最新的依赖的项

最后这个特性和排除依赖没有什么关系,只是顺带说一下。

在依赖项中使用加号+,可以在构建时检查远程仓库是否存在该依赖的新版本,如果存在新版本则下载选用最新版本。更有用的是可以指定依赖某个大版本下的最新子版本,如1.+表示始终采用依赖的1.x序列的最新版本。

示例如下:

 

1

compile 'com.zhyea:ar4j:+'

就这样。

#####

分类 : Gradle

标签 : gradle

本文链接地址:http://www.zhyea.com/2018/02/08/gradle-exclude-dependencies.html

### 如何在 Gradle 中使用 `dependencyManagement` 排除特定依赖 为了管理复杂的多模块项目中的依赖关系,有时需要排除某些传递性依赖。这可以通过配置 `dependencyManagement` 来实现。 #### 配置 `dependencyManagement` 当定义依赖项时,在 `dependencies` 块内可以指定要排除依赖项: ```groovy dependencies { implementation('org.example:some-library:1.0') { exclude group: 'com.unwanted', module: 'unneeded-dependency' } } ``` 对于更广泛的控制,可以在顶层设置 `dependencyManagement`,从而影响整个项目的依赖解析行为[^1]。 如果希望在整个项目范围内应用这些排除规则而不必重复声明,则可在根项目的 `build.gradle` 文件中加入如下代码片段: ```groovy dependencyManagement { imports { mavenBom "org.springframework.boot:spring-boot-dependencies:${springBootVersion}" } rules { allModules { eachDependency { DependencyResolveDetails details -> if (details.requested.group == 'javax.annotation') { details.useTarget 'jakarta.annotation:jakarta.annotation-api' } } } // 定义全局排除策略 resolutionStrategy.eachDependency { DependencyResolveDetails details -> if ('specific-group-id' == details.requested.group && 'specific-artifact-id' == details.requested.name) { details.exclude(group: 'excluded-group-id') } } } } ``` 上述脚本展示了如何通过自定义规则来修改或排除特定版本的依赖项以及怎样实施全局性的排除逻辑[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值