Gradle 多项目自定义 build.gradle 文件名

Gradle multi-project custom build.gradle file name

我有一个多项目 Gradle 构建,目前通过单个 build.gradle 文件进行配置。

这个项目中有超过 70 个模块,单个(巨大的)build.gradle 文件使用起来很麻烦,所以我想把它分成小的每个模块构建脚本文件。

现在,我不想拥有 70 个小 build.gradle 文件(每个模块一个),因为这会使导航到特定 build.gradle 成为 IDE(文件之间的唯一区别是它们的路径)。

我想要的是我的每个模块构建脚本文件以模块名称命名。

而不是这个:

root  
|--foo\  
|--| build.gradle  
|--bar\  
|--| build.gradle 

我想要这个:

root  
|--foo\  
|--| foo.gradle  
|--bar\  
|--| bar.gradle 

因为这似乎没有得到官方支持,我尝试绕过根 build.gradle 一点,但似乎在配置项目之前应用了 .gradle 文件,所以这给依赖于其他项目的项目一个错误:

根 build.gradle:

subprojects { subProject ->
    rootProject.apply from: "${subProject.name}/${subProject.name}.gradle"
}

foo.gradle,这不是标准的 build.gradle 文件:

project('foo') {
    dependencies {
        compile project(':bar')
    }
} 

有没有办法让它像这样工作?

您可以在 settings.gradle 文件中自定义构建脚本的名称。查看 Ben Muschko 最近关于 multi-project builds or look at Gradle sources 进行类似定制的演示文稿。

rootProject.children.each {
  it.buildFileName = it.name + '.gradle'
}

网络搜索“gradle 重命名 build.gradle”呈现以下示例 settings.gradle 文件:

rootProject.buildFileName = 'epub-organizer.gradle'

rootProject.children.each { project ->
    String fileBaseName = project.name.replaceAll("\p{Upper}") { "-${it.toLowerCase()}" }
    project.buildFileName = "${fileBaseName}.gradle"
}

请注意,作者在这里还重命名了根项目的构建脚本,您可能想要也可能不想要。

Gradle 的作者之一 Hans Dockter 在某处说过(我相信是在他的 "Rocking the Gradle" demo from 2012 中),他认为他们最大的错误之一是使用 build.gradle 作为默认文件名。

您可以在Gradle中找到此内容,manning