如何配置Gradle根项目,使其不再自动生成src目录?
阻止Gradle为根项目自动生成src目录
我完全懂你的困扰——当根项目只是用来聚合子模块的容器时,自动冒出来的src目录确实挺碍事的。这里有几个靠谱的解决办法:
方法1:移除根项目不必要的插件
如果你的根项目不需要编译自身代码(只是负责管理子模块),最干净的方式就是不要在根项目的build.gradle/build.gradle.kts里应用Java(或其他需要源目录的)插件。
先检查根项目的构建脚本,看看有没有类似这样的代码:
// Groovy DSL,需要移除 plugins { id 'java' }
或者Kotlin DSL版本:
// Kotlin DSL,需要移除 plugins { java }
删掉这些插件配置后,Gradle就不会触发默认源目录的生成逻辑了。
方法2:配置源集并禁用目录创建任务
如果根项目必须保留某些插件(比如要用到全局配置),可以通过修改sourceSets清空默认源目录,同时禁用自动创建目录的任务:
Groovy DSL(build.gradle)
sourceSets { main { java.srcDirs = [] resources.srcDirs = [] } test { java.srcDirs = [] resources.srcDirs = [] } } // 禁用所有自动创建源目录的任务 tasks.withType(CreateSourceDirectory) { enabled = false }
Kotlin DSL(build.gradle.kts)
sourceSets { main { java.setSrcDirs(emptyList()) resources.setSrcDirs(emptyList()) } test { java.setSrcDirs(emptyList()) resources.setSrcDirs(emptyList()) } } // 禁用所有自动创建源目录的任务 tasks.withType<CreateSourceDirectory> { enabled = false }
问题根源说明
Gradle的Java插件(以及其他语言相关插件)会默认定义main和test两个源集,并且在执行相关任务时自动创建对应的目录结构。当你添加新子模块时,根项目的插件逻辑可能被触发,导致这些目录被生成。上面的配置要么彻底移除了触发逻辑,要么明确告诉Gradle不需要这些源目录。
内容的提问来源于stack exchange,提问作者Ryan Stull
相关产品推荐
相关产品推荐

