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

6

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

这个项目中有70多个模块,并且单一(庞大)的build.gradle文件变得难以使用,因此我想将其拆分为每个模块的小型构建脚本文件。

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

我希望我的每个模块的构建脚本文件都以模块名称命名。

而不是这样:

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

I want this:

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')
    }
} 

有没有办法让它像这样工作?
3个回答

7
您可以在settings.gradle文件中自定义构建脚本的名称。请查看Ben Muschko最近关于多项目构建的演示,或查看Gradle源代码进行类似的自定义设置。
rootProject.children.each {
  it.buildFileName = it.name + '.gradle'
}

以上链接中Ben Muschko的幻灯片第52页详细介绍了“多项目”。 - javajon

7
一次搜索“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 在某处(我相信是在他2012年的Rocking the Gradle演示"中)表示,他认为他们最大的错误之一是将build.gradle作为默认文件名使用。

1
谢谢您,先生!在我尝试的所有谷歌搜索中,“rename”都不是其中之一。感谢! - Yevgeny Krasik
注意:在6.2.1中,我必须在迭代子项之前包含它们的子元素。看起来很明显,但我没有立即意识到。 - Azeroth2b

1
你可以在《Gradle实战》中找到这个内容,曼宁出版社出版。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接