面试题答案
一键面试- 使用
resolutionStrategy
:- 在项目的根目录下的
build.gradle
文件中,使用resolutionStrategy
来解决版本冲突。例如:
allprojects { configurations.all { resolutionStrategy { // 强制使用某一版本 force 'group:module:version' // 或者使用最新版本 resolutionStrategy.eachDependency { DependencyResolveDetails details -> if (details.requested.group == '相同依赖的组') { details.useVersion '指定版本' } } } } }
- 在项目的根目录下的
- 使用
exclude
:- 在模块A的
build.gradle
中,如果模块C和模块D依赖的相同库为group:module
,可以在模块A依赖模块C时排除掉冲突的依赖:
implementation ('group:moduleC') { exclude group: '相同依赖的组', module:'module' }
- 然后在模块A的
build.gradle
中手动引入一个统一版本的group:module
依赖:
implementation 'group:module:统一版本'
- 在模块A的
- 升级Gradle版本:
- 较新版本的Gradle可能对依赖冲突解决有更好的策略和算法,升级Gradle版本可能会自动解决部分冲突问题。可以在项目根目录的
gradle/wrapper/gradle - wrapper.properties
文件中修改distributionUrl
来指定更高版本的Gradle。例如:
distributionUrl=https\://services.gradle.org/distributions/gradle - 7.5.1 - all.zip
- 较新版本的Gradle可能对依赖冲突解决有更好的策略和算法,升级Gradle版本可能会自动解决部分冲突问题。可以在项目根目录的
- 检查依赖传递关系:
- 使用Gradle的
dependencyInsight
任务来查看依赖传递路径。在命令行进入项目根目录,执行:
./gradlew :moduleA:dependencyInsight --configuration runtimeClasspath --dependency group:module
- 这将显示模块A中
group:module
依赖的来源和传递路径,帮助定位和解决冲突。
- 使用Gradle的