2014-12-18 4 views
5

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 Datei build.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 verschiedenen settings.gradle Dateien gefunden. Welche Art von Code soll in settings.gradle stecken? Gibt es eine Best Practice, was in settings.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() 
} 

Antwort

1

settings.gradle entspricht der folgenden class und es ist ein ausführbares Skript sowie build.gradle. Es ist nicht notwendig in einzelnen Modulprojekten (kann aber definiert werden, um beispielsweise den Projektnamen zu deklarieren), aber es wird in Multimodulprojekten benötigt, weil es solche Projekte konfiguriert (siehe zum Beispiel include). Es kann nicht in build.gradle wegen unterschiedlicher API gerollt werden.

Ja, settings.gradle enthält Code wie oben angegeben (normales Skript + entsprechende Klasse). Grundsätzlich sollte es Code enthalten, der mit der Multimodul-Projektkonfiguration (Module, Einfügungen, Pfade, Namen) genau verbunden ist, was Sie in den Beispielen sehen können. Es gibt keine genau definierten guten Praktiken - Sie sollten sich hauptsächlich auf Dokumente verlassen. Mit der Zeit und nachdem du erfahrener bist, wirst du wissen, was dort zu finden ist.

Ich hoffe, es hat geholfen. Fühlen Sie sich frei, nach einer Klärung zu fragen.

Verwandte Themen