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

Yev*_*sik 4 build multi-project gradle

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

这个项目中有70多个模块,单个(巨大的)build.gradle文件使用起来很麻烦,所以我想将它拆分成小的每个模块的buildscript文件.

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

我想要的是我的每个模块的buildscript文件以模块名称命名.

而不是这个:

root  
|--foo\  
|--| build.gradle  
|--bar\  
|--| build.gradle 
Run Code Online (Sandbox Code Playgroud)

我要这个:

root  
|--foo\  
|--| foo.gradle  
|--bar\  
|--| bar.gradle 
Run Code Online (Sandbox Code Playgroud)

由于这似乎没有得到官方支持,我尝试了一下root build.gradle,但似乎在配置项目之前应用.gradle文件,所以这给依赖于其他项目的项目带来了错误项目:

在root build.gradle中:

subprojects { subProject ->
    rootProject.apply from: "${subProject.name}/${subProject.name}.gradle"
}
Run Code Online (Sandbox Code Playgroud)

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

project('foo') {
    dependencies {
        compile project(':bar')
    }
} 
Run Code Online (Sandbox Code Playgroud)

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

Jol*_*lta 6

对"gradle rename build.gradle"进行简单的Web搜索会显示以下示例settings.gradle文件:

rootProject.buildFileName = 'epub-organizer.gradle'

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

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

Gradle的作者之一Hans Dockter在某处说过(我相信这是他2012年的"Rocking the Gradle"演示),他觉得他们最大的错误之一就是使用build.gradle默认文件名.


Rad*_*dim 5

您可以在settings.gradle文件中自定义构建脚本的名称.查看Ben Muschko最近关于多项目构建的演示,或查看完成类似定制的Gradle源代码.

rootProject.children.each {
  it.buildFileName = it.name + '.gradle'
}
Run Code Online (Sandbox Code Playgroud)