如何确定settings.gradle与bulid.gradle的内容?

ams*_*ams 6 java gradle

我目前正在学习gradle,阅读一堆gradle书籍,并查看大型java项目的gradle构建脚本,如spring框架,hibernate和gradle项目本身,目的是了解使用gradle的最佳实践.

我注意到在gradle multiproject构建中有两个文件settings.gradle,build.gradle我的问题是.

  • settings.gradle绝对必需的多项目构建?可以滚动到build.gradle文件中吗?
  • 在我看过的一些开源项目中,我注意到settings.gradle实际上包含代码而不仅仅是设置,请参阅我在各种settings.gradle文件中找到的代码示例.应该放什么样的代码settings.gradlesettings.grdale对于build.gradle应该遵循的内容,是否有最佳实践?链接的开源项目是否违反了最佳实践规则?

从Spring Security Project中settings.gradle只需选择几行代码来自https://github.com/spring-projects/spring-security/blob/master/settings.gradle

include modules

modules.each {name ->
    def p = findProject(":${name}")
    p.name = "spring-security-${name}"
    p.buildFileName = "${name}.gradle"
}

include samples

samples.each {name ->
    def p = findProject(":${name}")
    def fullName = name.replaceAll('/','')
    p.name = "spring-security-samples-${fullName}"
    p.projectDir = new File(settingsDir, "samples/${name}");
    if(!p.buildFile.exists()) {
        def buildFile = fullName.replaceFirst("-xml","")
        p.buildFileName = "${buildFile}.gradle"
    }
}
Run Code Online (Sandbox Code Playgroud)

从gradle项目本身来自https://github.com/gradle/gradle/blob/master/settings.gradle的小片段

rootProject.children.each {project ->
    String fileBaseName = project.name.replaceAll("\\p{Upper}") { "-${it.toLowerCase()}" }
    String projectDirName = "subprojects/$fileBaseName"
    project.projectDir = new File(settingsDir, projectDirName)
    project.buildFileName = "${fileBaseName}.gradle"
    assert project.projectDir.isDirectory()
    assert project.buildFile.isFile()
}
Run Code Online (Sandbox Code Playgroud)

Opa*_*pal 1

settings.gradle对应于以下,它是一个可执行脚本以及build.gradle. 在单模块项目中不需要它(但可以定义为例如声明项目名称),但在多模块项目中需要它,因为它配置此类项目(参见include示例)。build.gradle由于API不同,无法滚入。

是的,settings.gradle包含如上所述的代码(普通脚本+相应的类)。基本上它应该包含与多模块项目配置(模块包含、路径、名称)相关的代码,正如您在提供的示例中看到的那样。没有严格定义的良好实践集 - 您应该主要依赖文档。随着时间的推移和经验的积累,你会知道应该放什么。

希望有帮助。请随时询问任何澄清。