./gradle tasks
geeft een lijst van “sommige” taken. Kijken naar
http://gradle.org/docs/current/userguide/java_plugin.htmler zijn verborgen die niet worden vermeld. Ook zullen andere plug-ins niet zo’n mooie, mooie grafiek hebben van de afhankelijkheden tussen taken.
Is er een manier om
- lijst alle taken in alle plug-ins met gradle
- maak een lijst van de taken en van welke taken ze afhankelijk zijn (een beetje zoals maven’s
dependency:tree
maar voor taken)
Antwoord 1, autoriteit 100%
maak een lijst van de taken en van welke taken ze afhankelijk zijn (een beetje zoals die van maven
depenceny:tree maar voor taken)
hiervoor kunt u de optie --dry-run
(of -m
) gebruiken die een lijst geeft van taken die worden uitgevoerd in volgorde voor een bepaalde opdracht, maar de commando, bijv.
gradle assemble --dry-run
meer hier
Antwoord 2, autoriteit 55%
Vóór Gradle 3.3 kon je de vlag --all
gebruiken om een meer gedetailleerde lijst te krijgen van de beschikbare taken en de taakafhankelijkheden:
gradle tasks --all
De afhankelijkheidsrapportage is vanaf Gradle 3.3 om prestatieredenen uit deze taak verwijderd. Deze wijziging en de grondgedachte zijn gedocumenteerd in de Gradle 3.3 release-opmerkingen.
Antwoord 3, autoriteit 33%
Je kunt de plug-in com.dorongold.task-treeproberen met eenvoudig gebruik:
gradle <task 1>...<task N> taskTree
Voorbeeldresultaat van de readme:
gradle build taskTree
:build
+--- :assemble
| \--- :jar
| \--- :classes
| +--- :compileJava
| \--- :processResources
\--- :check
\--- :test
+--- :classes
| +--- :compileJava
| \--- :processResources
\--- :testClasses
+--- :compileTestJava
| \--- :classes
| +--- :compileJava
| \--- :processResources
\--- :processTestResources
Antwoord 4, autoriteit 23%
Je kunt dit in je build.gradle
plakken:
gradle.taskGraph.whenReady {taskGraph ->
println "Found task graph: " + taskGraph
println "Found " + taskGraph.allTasks.size() + " tasks."
taskGraph.allTasks.forEach { task ->
println task
task.dependsOn.forEach { dep ->
println " - " + dep
}
}
}
of dit in uw build.gradle.kts
:
gradle.taskGraph.whenReady(closureOf<TaskExecutionGraph> {
println("Found task graph: $this")
println("Found " + allTasks.size + " tasks.")
allTasks.forEach { task ->
println(task)
task.dependsOn.forEach { dep ->
println(" - $dep")
}
}
})
Voer vervolgens uw taak uit met gradle:
./gradlew build
En je zou dit moeten zien:
Found task graph: org.gradle.execution.taskgraph.DefaultTaskGraphExecuter@36eb780c
Found 19 tasks.
task ':compileJava'
- task 'compileJava' input files
task ':compileScala'
- task 'compileScala' input files
- compileJava
task ':processResources'
- task 'processResources' input files
task ':classes'
- org.gradle.api.internal.tasks.DefaultTaskDependency@287a7782
- task 'classes' input files
- compileJava
- dirs
- compileScala
- processResources
task ':jar'
- task 'jar' input files
task ':assemble'
- task 'assemble' input files
- org.gradle.api.internal.artifacts.DefaultPublishArtifactSet$ArtifactsTaskDependency@5bad9616
task ':compileTestJava'
- task 'compileTestJava' input files
task ':compileTestScala'
- task 'compileTestScala' input files
- compileTestJava
task ':processTestResources'
- task 'processTestResources' input files
task ':testClasses'
- processTestResources
- task 'testClasses' input files
- compileTestScala
- org.gradle.api.internal.tasks.DefaultTaskDependency@42c1fa08
- compileTestJava
- dirs
task ':compileIntegrationTestJava'
- task 'compileIntegrationTestJava' input files
task ':compileIntegrationTestScala'
- task 'compileIntegrationTestScala' input files
- compileIntegrationTestJava
task ':processIntegrationTestResources'
- task 'processIntegrationTestResources' input files
task ':integrationTestClasses'
- processIntegrationTestResources
- compileIntegrationTestJava
- org.gradle.api.internal.tasks.DefaultTaskDependency@7c8aa0fe
- compileIntegrationTestScala
- dirs
- task 'integrationTestClasses' input files
task ':composeUp'
- task 'composeUp' input files
task ':integrationTest'
- task ':composeUp'
- task 'integrationTest' input files
task ':test'
- task 'test' input files
task ':check'
- task 'check' input files
- task ':test'
- task ':integrationTest'
task ':build'
- task 'build' input files
- check
- assemble
Antwoord 5, autoriteit 8%
gradle-takenboom kan worden gevisualiseerd door gradle tasks --all
ofprobeer de volgende plug-ins:
Grafieken Gradle en Talaiot:
Kijk hier eens naar: https://proandroiddev.com/graphs-gradle-and-talaiot- b0c02c50d2b1blog omdat het de taken en afhankelijkheden grafisch weergeeft. Dit maakt gebruik van de gratisopen Graphviz-tool Gephi(https://gephi .org/features/)
gradle-task-tree: https://github. com/dorongold/gradle-task-treeen
gradle-visteg: https://github.com/mmalohlava/ gradle-visteg
-
gradle-vistegplug-in: het gegenereerde bestand kan worden nabewerkt via Graphviz
dot
hulpprogramma. -
Bijvoorbeeldwordt een png-afbeelding als volgt geproduceerd:
cd build/reports/; dot -Tpng ./visteg.dot -o ./visteg.dot.png
Ga voor meer informatie naar de Graphviz-startpagina.
Alle taken die daadwerkelijk worden gebruikt om een taak uit te voeren (bijvoorbeeld: build
) kunnen worden bekeken op een mooie HTML-pagina met de optie --profile
gradle –profileclean build
Zodra dit is voltooid, gaat u naar de map build/reports/profile en bladert u door het .html-bestand. Je zult de oplossing van afhankelijkheden en andere informatie na verloop van tijd zien op een mooie html-pagina.
Antwoord 6, autoriteit 7%
Hier is een nieuwe plug-in voor:
plugins {
id 'org.barfuin.gradle.taskinfo' version '1.0.1'
}
Vervolgens kun je typen:
./gradlew tiTree assemble
en krijg zoiets als dit:
:assemble (org.gradle.api.DefaultTask)
+--- :jar (org.gradle.api.tasks.bundling.Jar)
| `--- :classes (org.gradle.api.DefaultTask)
| +--- :compileJava (org.gradle.api.tasks.compile.JavaCompile)
| `--- :processResources (org.gradle.language.jvm.tasks.ProcessResources)
+--- :javadocJar (org.gradle.api.tasks.bundling.Jar)
| `--- :javadoc (org.gradle.api.tasks.javadoc.Javadoc)
| `--- :classes (org.gradle.api.DefaultTask)
| +--- :compileJava (org.gradle.api.tasks.compile.JavaCompile)
| `--- :processResources (org.gradle.language.jvm.tasks.ProcessResources)
`--- :sourcesJar (org.gradle.api.tasks.bundling.Jar)
De plug-in kan ook de volgorde weergeven waarin taken worden uitgevoerd:
In order to execute task ':assemble', the following tasks would be executed in this order:
1. :compileJava (org.gradle.api.tasks.compile.JavaCompile)
2. :processResources (org.gradle.language.jvm.tasks.ProcessResources)
3. :classes (org.gradle.api.DefaultTask)
4. :jar (org.gradle.api.tasks.bundling.Jar)
5. :javadoc (org.gradle.api.tasks.javadoc.Javadoc)
6. :javadocJar (org.gradle.api.tasks.bundling.Jar)
7. :sourcesJar (org.gradle.api.tasks.bundling.Jar)
8. :assemble (org.gradle.api.DefaultTask)
Meer info in de documentatie van de plug-in.
Volledige openbaarmaking: ik ben de auteur van gradle-taskinfo.
Antwoord 7, autoriteit 4%
U kunt programmatisch toegang krijgen tot de taakgrafiek om deze in het buildscript te inspecteren met Gradle.getTaskGraph()
Antwoord 8, autoriteit 2%
Naarmate uw multiproject groeit, wordt de oplossing die ik als correct heb gemarkeerd een beetje onhandig en moeilijk leesbaar
gradle tasks --all
In plaats daarvan ben ik overgestapt op het kijken naar een specifiek project, waardoor het veel gemakkelijker is
gradlew :full-httpproxy:tasks --all
waarbij ‘full-httpproxy’ de naam is van mijn project (en directory zoals gebruikelijk).
Ik ben echter benieuwd hoe ik taken op het master/root-project kan vermelden en heb hier ook een openstaande vraag
Alle taken weergeven voor het masterproject alleen in gradle?
omdat dat op dit moment niet mogelijk lijkt.
Antwoord 9, autoriteit 2%
Volgend op het antwoord van cstroe, drukt het volgende ook de invoer- en uitvoerbestanden van elke Gradle-taak af. Dit is handig omdat afhankelijkheden soms worden gedefinieerd door input/output-relaties. D.w.z. als taak B de uitvoer van taak A gebruikt, zal het antwoord van cstroe u de afhankelijkheid niet laten zien. Het volgende is erg primitief, maar toont wel de lijst met invoer- en uitvoerbestanden voor elke taak:
gradle.taskGraph.whenReady {taskGraph ->
println "Found task graph: " + taskGraph
println "Found " + taskGraph.allTasks.size() + " tasks."
taskGraph.allTasks.forEach { task ->
println()
println("----- " + task + " -----")
println("depends on tasks: " + task.dependsOn)
println("inputs: ")
task.inputs.getFiles().getFiles().collect { f -> println(" - " + f)}
println("outputs: ")
task.outputs.getFiles().getFiles().collect { f -> println(" + " + f)}
}
}
Antwoord 10
Je kunt ook de volgende plug-in toevoegen voor je lokale omgeving build.gradle, https:// github.com/dorongold/gradle-task-tree
Antwoord 11
Als plug-ins niet voor u werken, kunt u deze kern gebruiken in uw build.gradle
https://gist.github.com/jrodbx/046b66618c558ca9002a825629d59cde