我目前正在学习gradle,阅读一堆gradle书籍,并查看大型java项目的gradle构建脚本,如spring框架,hibernate和gradle项目本身,目的是了解使用gradle的最佳实践。
我注意到在gradle multiproject构建中有两个文件settings.gradle
和build.gradle
我的问题。
settings.gradle
吗?它可以归入build.gradle
文件吗? settings.gradle
实际上包含代码而不仅仅是设置,请参阅我在各种settings.gradle
文件中找到的代码示例。什么样的代码应放入settings.gradle
?是否应该遵循settings.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"
}
}
来自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()
}
答案 0 :(得分:1)
settings.gradle
对应于以下class,它是可执行脚本以及build.gradle
。在单个模块项目中没有必要(但可以定义为例如声明项目名称),但多模块项目中需要它,因为它配置了这样的项目(例如,参见include
)。由于API不同,它无法归入build.gradle
。
是的,settings.gradle
包含上述代码(普通脚本+相应的类)。基本上它应该包含与多模块项目配置(模块包含,路径,名称)相关联的代码,这些代码完全可以在所提供的示例中看到。没有严格定义的良好实践 - 您应该主要依赖于文档。随着时间的推移,在获得更多经验之后,你会知道应该放在那里。
希望它有所帮助。请随时要求澄清。