如何确定进入settings.gradle与build.gradle的内容?

时间:2014-12-18 15:29:51

标签: java gradle

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

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

  • 多项目构建绝对需要settings.gradle吗?它可以归入build.gradle文件吗?
  • 在我看过的一些开源项目中,我注意到settings.gradle实际上包含代码而不仅仅是设置,请参阅我在各种settings.gradle文件中找到的代码示例。什么样的代码应放入settings.gradle?是否应该遵循settings.grdalebuild.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"
    }
}

来自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()
}

1 个答案:

答案 0 :(得分:1)

settings.gradle对应于以下class,它是可执行脚本以及build.gradle。在单个模块项目中没有必要(但可以定义为例如声明项目名称),但多模块项目中需要它,因为它配置了这样的项目(例如,参见include)。由于API不同,它无法归入build.gradle

是的,settings.gradle包含上述代码(普通脚本+相应的类)。基本上它应该包含与多模块项目配置(模块包含,路径,名称)相关联的代码,这些代码完全可以在所提供的示例中看到。没有严格定义的良好实践 - 您应该主要依赖于文档。随着时间的推移,在获得更多经验之后,你会知道应该放在那里。

希望它有所帮助。请随时要求澄清。