gradle 新的依赖方式 implementation、api、compileOnly

gradle升级之后,有了新的依赖方式,下面我来介绍一下他们的使用

先看看之前的
old
再看看现在的

区别和使用

implementation和api

implementationapi是取代之前的compile的,其中apicompile是一样的效果,implementation有所不同,通过implementation依赖的库只能自己库本身访问,举个例子,A依赖B,B依赖C,如果B依赖C是使用的implementation依赖,那么在A中是访问不到C中的方法的,如果需要访问,请使用api依赖

compile only

compile onlyprovided效果是一样的,只在编译的时候有效, 不参与打包

runtime only

runtimeOnlyapk效果一样,只在打包的时候有效,编译不参与

test implementation

testImplementationtestCompile效果一样,在单元测试和打包测试apk的时候有效

debug implementation

debugImplementationdebugCompile效果相同, 在debug模式下有效

release implementation

releaseImplementationreleaseCompile效果相同,只在release模式和打包release包情况下有效

大概就是这些了,需要更多请上车

### Gradle 中的间接依赖管理 在 Gradle 构建工具中,`indirect dependencies` 或者称为传递性依赖(transitive dependencies),是指项目中的某个模块所引入的库会自动将其自身的依赖也一并引入到项目的构建环境中。这种机制简化了依赖声明的工作量,但也可能导致版本冲突或其他复杂问题。 #### 1. 默认行为 Gradle 的 `DependencyHandler` 提供了一种默认支持传递性依赖方式[^1]。当通过 `implementation`, `api`, `compileOnly`, 或其他配置来定义依赖项时,默认情况下这些依赖会被解析为其所有的传递性依赖。例如: ```groovy dependencies { implementation 'com.example.library:module-name:version' } ``` 上述代码不仅会将指定的模块作为直接依赖引入,还会尝试加载该模块所需的任何间接依赖。 --- #### 2. 解决版本冲突 如果多个依赖之间存在版本不一致的情况,可以利用 Gradle 自带的功能进行控制。以下是几种常见的方法: ##### (1)强制指定特定版本 可以通过 `resolutionStrategy` 来统一某些包的版本号。例如,在根级 `build.gradle` 文件中设置如下规则: ```groovy configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> if (details.requested.group == 'org.apache.commons') { details.useVersion 'specific-version-here' } } } ``` 此策略适用于所有具有相同组名 (`group`) 的依赖项,并确保它们始终使用相同的版本[^3]。 --- ##### (2)排除不必要的间接依赖 有时为了减少潜在的风险或者优化性能,可以选择手动移除不需要的部分。语法结构如下所示: ```groovy dependencies { implementation('groupId:artifactId:version') { exclude group: 'unwantedGroup', module: 'unwantedModule' } } ``` 这样做的好处是可以避免因第三方库带来的冗余组件而引发兼容性隐患[^2]。 --- #### 3. 查看当前项目的实际依赖树 要清楚了解整个应用究竟包含了哪些级别的外部资源以及其间的关联关系,则可运行命令行指令查看完整的依赖图谱: ```bash ./gradlew :app:dependencies ``` 它将以分层形式展示每一个节点及其子集的信息,便于开发者定位具体位置上的差异之处。 --- #### 4. 使用新的插件增强功能 随着技术的发展,官方还推出了专门用于改善这方面体验的新特性——如 Plugin Portal 上提供的各种扩展方案之一:“dependency-lock”。启用之后能够记录下每次成功的编译过程中确切使用的各部分清单文件(`lockfile`),从而实现更稳定的长期维护效果。 --- ### 总结 通过对以上几个方面的介绍可以看出,Gradle 不仅提供了强大的基础框架去自动化处理大部分场景下的间接依赖需求,同时也赋予使用者足够的灵活性来自定义特殊条件下的解决方案。合理运用这些手段可以帮助我们更好地掌控复杂的多模块工程项目架构。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值