Gradle从4.x升级至5.x时sourceSets报错,求兼容修改方案
Gradle 4 升级到 5 版本的兼容适配方案(多模块项目)
一、修复sourceSets相关报错
从报错信息来看,核心问题集中在sourceSets配置上,Gradle 5 对DSL语法和属性做了严格规范,对应修改如下:
- 规范
sourceSets闭包写法,避免直接赋值的松散语法:// Gradle 4旧写法 sourceSets.main.java.srcDirs = ['src'] // Gradle 5 标准写法 sourceSets { main { java { srcDirs = ['src/main/java'] // 明确指定源码目录,自定义路径也需按此格式配置 } resources { srcDirs = ['src/main/resources'] } } } - 替换弃用属性:
output.classesDir已被弃用,改为复数形式output.classesDirs:// 旧写法 sourceSets.main.output.classesDir = file("$buildDir/classes") // 新写法 sourceSets.main.output.classesDirs = file("$buildDir/classes/java/main")
二、多模块项目通用适配修改
- 统一插件与Gradle版本:根项目
settings.gradle确保所有子模块使用相同Gradle版本,同时插件版本要匹配(比如Android项目需使用3.3.0+版本的Android Gradle Plugin,对应Gradle 5.x)。 - 替换依赖配置关键字:
compile、testCompile等旧配置已被弃用,全部替换为implementation/api、testImplementation:// 旧写法 compile 'com.google.guava:guava:28.0-jre' testCompile 'junit:junit:4.12' // 新写法 implementation 'com.google.guava:guava:28.0-jre' testImplementation 'junit:junit:4.12' // 若需将依赖暴露给子模块,使用api替代compile api 'com.example:core-library:1.0.0' - 替换过时插件:
maven插件已被maven-publish替代,修改插件引入方式:// 旧写法 apply plugin: 'maven' // 新写法 plugins { id 'maven-publish' }
三、其他细节调整
- 规范文件路径解析:Gradle 5 对相对路径解析更严格,避免硬编码路径,改用
project.file()或layoutAPI:// 旧写法 file('../common/libs/utils.jar') // 新写法(根据模块层级调整) project.file('libs/utils.jar') - 任务行为适配:部分任务默认逻辑改变,比如
clean任务不再自动递归执行子模块clean,可在根项目配置:tasks.named('clean') { dependsOn subprojects.clean }
内容的提问来源于stack exchange,提问作者Vivek Panday
相关产品推荐
相关产品推荐

