Ich lerne derzeit Gradle, indem ich eine Reihe von Gradle-Büchern lese und durch die Gradle-Build-Skripte für große Java-Projekte wie Springframework, Hibernate und das Grapple-Projekt selbst schaue, um Best Practices für die Verwendung von Gradle zu verstehen.Wie zu bestimmen, was in settings.gradle vs bulid.gradle geht?
Ich habe festgestellt, dass in einem Graple Multiprojekt Build gibt es zwei Dateien settings.gradle
und build.gradle
meine Fragen sind.
- Ist
settings.gradle
unbedingt für einen Multiprojektaufbau erforderlich? kann es in die Dateibuild.gradle
gerollt werden? - In einigen der Open-Source-Projekte, die ich mir angesehen habe, habe ich festgestellt, dass
settings.gradle
tatsächlich Code enthält und nicht nur Einstellungen finden Sie Beispiele für Code, den ich in verschiedenensettings.gradle
Dateien gefunden. Welche Art von Code soll insettings.gradle
stecken? Gibt es eine Best Practice, was insettings.grdale
vs.build.gradle
, die gefolgt werden sollte, geht? Unterbrechen die verknüpften Open-Source-Projekte diese Best Practices-Regeln?
Von Spring Security-Projekt settings.gradle
nur ausgewählte paar Zeilen Code aus 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"
}
}
Und aus dem gradle Projekt selbst ein kleiner Ausschnitt aus 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()
}