【问题标题】:How to determine what goes into settings.gradle vs. bulid.gradle?如何确定 settings.gradle 与 build.gradle 的内容?
【发布时间】:2015-02-17 10:45:08
【问题描述】:

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

我注意到在 gradle 多项目构建中有两个文件 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 的小 sn-p

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

【问题讨论】:

    标签: java gradle


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2012-05-19
      • 2023-03-30
      • 2015-02-15
      • 2020-07-06
      相关资源
      最近更新 更多