2017-09-22 15 views
3

Nehmen wir an, ich habe ein multimodul grades projekt mit zwei grdle module, :A und :B.Get name von gradle-modul, und der name von anderen modules es hängt davon ab

. 
├── :A 
│   └── build.gradle 
├── :B 
│   └── build.gradle 
├── build.gradle  (plugin applied here) 
└── settings.gradle 
  • :A hat keine Abhängigkeiten
  • :B eine Abhängigkeit hat auf :A

ich die folgenden Informationen erhalten möchten.

  • eine Liste der Namen der einzelnen Module im Projekt: :A, :B
  • Liste der Modulnamen, die jedes Modul auf abhängt. Für :A, wäre dies eine leere Liste sein, und für :B wäre es listOf(":A") (Einzelelementliste)

Wie kann ich diese Informationen im Rahmen erhalten wird von einem benutzerdefinierten gradle Plugin, das an der Wurzel gradle Modul angewandt wird?

Der Anwendungsfall dafür ist eine visuelle Darstellung zu erzeugen, wie jedes Modul in einem Multi-Modul-Projekt

+0

Sie meinen 'A' und 'B' und Projekte in Multi-Modul-Projekt oder Multimodul selbst Projekte? – Opal

+0

@Opal Multi-Modul-Projekt (Standard-Android-Projekt-Setup) Ich glaube, – ZakTaccardi

+0

Könnten Sie nur die Struktur zusammen mit relevanten '* .gradle' Dateien skizzieren? Ein einfacher ASCII-Baum ist ausreichend. – Opal

Antwort

3

Hier verbunden ist, ein Ausschnitt für durch jeden Configuration gehen und bekommen die ProjectDependency Arten von ihnen. Es verwendet Gradle.projectsEvaluated(org.gradle.api.Action), die ausgeführt wird, nachdem alle Projekte ausgewertet werden. Es macht nichts, um Transitives herauszufinden oder eine Vorstellung davon zu haben, wer von wem abhängt, aber dies kann Ihnen hoffentlich einen Ausgangspunkt dafür geben, wie Sie das erreichen können, wonach Sie suchen.

gradle.projectsEvaluated { 
    println('Projects loaded') 
    println('*' * 15) 
    allprojects.forEach { proj -> 
    final List<ProjectDependency> projectDependencies = proj.configurations.collectMany { Configuration configuration -> 
     configuration.allDependencies 
    }.findAll { Dependency dependency -> 
     dependency instanceof ProjectDependency 
    }.collect { 
     it as ProjectDependency 
    }.unique().collect() 
    println("Project ${proj.name}") 
    println(projectDependencies.collect { " ${it.name} -> ${it.dependencyProject.path}" }.join(System.lineSeparator())) 
    println() 
    } 
} 

Ich versuchte es auf dem junit-team/junit5 Repository aus und bekam die folgende Ausgabe:

Projects loaded 
*************** 
Project junit5 


Project documentation 
    junit-jupiter-api -> :junit-jupiter-api 
    junit-jupiter-params -> :junit-jupiter-params 
    junit-platform-runner -> :junit-platform-runner 
    junit-platform-launcher -> :junit-platform-launcher 
    junit-platform-console -> :junit-platform-console 
    junit-vintage-engine -> :junit-vintage-engine 
    junit-jupiter-engine -> :junit-jupiter-engine 

Project junit-jupiter-api 
    junit-platform-commons -> :junit-platform-commons 

Project junit-jupiter-engine 
    junit-platform-engine -> :junit-platform-engine 
    junit-jupiter-api -> :junit-jupiter-api 
    junit-platform-launcher -> :junit-platform-launcher 
    junit-platform-runner -> :junit-platform-runner 
    junit-platform-engine -> :junit-platform-engine 
    junit-platform-console -> :junit-platform-console 

Project junit-jupiter-migrationsupport 
    junit-jupiter-api -> :junit-jupiter-api 
    junit-jupiter-engine -> :junit-jupiter-engine 
    junit-platform-launcher -> :junit-platform-launcher 
    junit-platform-runner -> :junit-platform-runner 
    junit-platform-engine -> :junit-platform-engine 
    junit-platform-console -> :junit-platform-console 

Project junit-jupiter-params 
    junit-jupiter-api -> :junit-jupiter-api 
    junit-platform-engine -> :junit-platform-engine 
    junit-jupiter-engine -> :junit-jupiter-engine 
    junit-platform-launcher -> :junit-platform-launcher 
    junit-platform-runner -> :junit-platform-runner 
    junit-platform-console -> :junit-platform-console 

Project junit-platform-commons 


Project junit-platform-console 
    junit-platform-launcher -> :junit-platform-launcher 

Project junit-platform-console-standalone 
    junit-platform-console -> :junit-platform-console 
    junit-jupiter-engine -> :junit-jupiter-engine 
    junit-jupiter-params -> :junit-jupiter-params 
    junit-vintage-engine -> :junit-vintage-engine 
    junit-jupiter-api -> :junit-jupiter-api 
    junit-jupiter-params -> :junit-jupiter-params 

Project junit-platform-engine 
    junit-platform-commons -> :junit-platform-commons 

Project junit-platform-gradle-plugin 
    junit-platform-console -> :junit-platform-console 
    junit-platform-launcher -> :junit-platform-launcher 
    junit-jupiter-api -> :junit-jupiter-api 
    junit-platform-console -> :junit-platform-console 
    junit-jupiter-engine -> :junit-jupiter-engine 

Project junit-platform-launcher 
    junit-platform-engine -> :junit-platform-engine 

Project junit-platform-runner 
    junit-platform-launcher -> :junit-platform-launcher 
    junit-platform-suite-api -> :junit-platform-suite-api 

Project junit-platform-suite-api 
    junit-platform-commons -> :junit-platform-commons 

Project junit-platform-surefire-provider 
    junit-platform-launcher -> :junit-platform-launcher 
    junit-jupiter-api -> :junit-jupiter-api 
    junit-platform-runner -> :junit-platform-runner 
    junit-jupiter-engine -> :junit-jupiter-engine 
    junit-platform-console -> :junit-platform-console 

Project junit-vintage-engine 
    junit-platform-engine -> :junit-platform-engine 
    junit-platform-launcher -> :junit-platform-launcher 
    junit-jupiter-api -> :junit-jupiter-api 
    junit-platform-runner -> :junit-platform-runner 
    junit-platform-engine -> :junit-platform-engine 
    junit-platform-console -> :junit-platform-console 
    junit-jupiter-engine -> :junit-jupiter-engine 

Project platform-tests 
    junit-platform-commons -> :junit-platform-commons 
    junit-platform-console -> :junit-platform-console 
    junit-platform-engine -> :junit-platform-engine 
    junit-platform-launcher -> :junit-platform-launcher 
    junit-jupiter-api -> :junit-jupiter-api 
    junit-jupiter-params -> :junit-jupiter-params 
    junit-platform-runner -> :junit-platform-runner 
    junit-platform-engine -> :junit-platform-engine 
    junit-jupiter-engine -> :junit-jupiter-engine 
    junit-vintage-engine -> :junit-vintage-engine 
    junit-jupiter-migrationsupport -> :junit-jupiter-migrationsupport 
    junit-platform-gradle-plugin -> :junit-platform-gradle-plugin 
    junit-platform-surefire-provider -> :junit-platform-surefire-provider 
+0

Das ist ziemlich gut, aber denken Sie daran, dass in diesem Code die interne API verwendet wird. – Opal

+0

@Opal Ich glaube nicht, dass ich irgendwelche internen APIs verwendet habe (soweit ich das beurteilen kann). – mkobit

+1

Sie haben Recht! Ich dachte, dass 'ProjectDependency' von der internen API stammt. Cool! :) – Opal