Every Gradle build has access to a default set of tasks that can deliver insight information on your build settings. You probably have come across the dependencies
task. This task can display dependencies associated with all configurations of a particular project; you can even instruct which configuration to be queried if the list of configurations happens to be very long. Let's say we have a Java project that looks like this
build.gradle
plugins { id 'java' id 'org.kordamp.gradle.project' version '0.11.0' } ext.build_property = 'build' config { license { enabled = false } publishing { enabled = false } } repositories { jcenter() mavenCentral() flatDir { dirs 'lib' } } dependencies { testCompile 'junit:junit:4.12' }
Invoking the dependencies
task for this project yields
$ gradlew dependencies --configuration=testCompile > Task :dependencies ------------------------------------------------------------ Root project ------------------------------------------------------------ testCompile - Dependencies for source set 'test' (deprecated, use 'testImplementation' instead). \--- junit:junit:4.12 \--- org.hamcrest:hamcrest-core:1.3 A web-based, searchable dependency report is available by adding the --scan option. BUILD SUCCESSFUL in 0s 1 actionable task: 1 executed
There's another task named properties
which displays all the properties that a Gradle project instance has. Unfortunately this task also displays the list of all plugin instances, configurations, extensions, tasks, and other semi-private (implementation details) that may not be relevant to some degree. However if you apply the org.kordamp.gradle.base
plugin to your project you gain access to 4 new tasks that display this information segregated by responsibility. This tasks are:
- projectProperties
- extensions
- repositories
- plugins
To demonstrate this I'll add global, local, and project properties to the build in the following way
~/.gradle/gradle.properties
global_property = global
gradle.properties
version = 0.0.0 group = org.kordamp.sample.acme local_property = local
Then invoke the build with the following command
$ gradlew projectProperties -Pproject_property=project > Task :projectProperties project: name: sample version: 0.0.0 group: org.kordamp.sample.acme path: : displayName: root project 'sample' projectDir: /tmp/sample buildFile: /tmp/sample/build.gradle buildDir: /tmp/sample/build ext: build_property: build global_property: global local_property: local project_property: project
Notice that properties that inherently belong to the Project instance are put into a separate section from those that are added dynamically (the ext
block). You can also obtain a list of all extensions currently applied to the project
$ gradlew extensions > Task :extensions extension 0: name: ext type: org.gradle.api.plugins.ExtraPropertiesExtension extension 1: name: defaultArtifacts type: org.gradle.api.internal.plugins.DefaultArtifactPublicationSet extension 2: name: config type: org.kordamp.gradle.plugin.base.ProjectConfigurationExtension extension 3: name: reporting type: org.gradle.api.reporting.ReportingExtension extension 4: name: jacoco type: org.gradle.testing.jacoco.plugins.JacocoPluginExtension extension 5: name: downloadLicenses type: nl.javadude.gradle.plugins.license.DownloadLicensesExtension extension 6: name: license type: nl.javadude.gradle.plugins.license.LicenseExtension extension 7: name: signing type: org.gradle.plugins.signing.SigningExtension extension 8: name: effectiveConfig type: org.kordamp.gradle.plugin.base.ProjectConfigurationExtension extension 9: name: versioning type: net.nemerosa.versioning.VersioningExtension extension 10: name: bintray type: com.jfrog.bintray.gradle.BintrayExtension
This task prints out the type and name of each extension. You may also list all repositories used to resolve dependencies, for example
$ gradlew repositories > Task :repositories repository 0: type: maven name: BintrayJCenter url: https://jcenter.bintray.com/ repository 1: type: maven name: MavenRepo url: https://repo.maven.apache.org/maven2/ repository 2: type: flatDir name: flatDir dirs: /tmp/sample/lib
Finally, you can also list all plugins that have been applied to a project
$ gradlew plugins > Task :plugins plugin 0: implementationClass: org.gradle.api.plugins.HelpTasksPlugin plugin 1: implementationClass: org.gradle.language.base.plugins.LifecycleBasePlugin plugin 2: implementationClass: org.gradle.api.plugins.BasePlugin plugin 3: id: org.kordamp.gradle.base implementationClass: org.kordamp.gradle.plugin.base.BasePlugin enabled: true plugin 4: implementationClass: org.gradle.api.plugins.ReportingBasePlugin plugin 5: implementationClass: org.gradle.testing.jacoco.plugins.JacocoPlugin plugin 6: id: org.kordamp.gradle.jacoco implementationClass: org.kordamp.gradle.plugin.jacoco.JacocoPlugin enabled: true plugin 7: id: com.github.hierynomus.license-report implementationClass: com.hierynomus.gradle.license.LicenseReportingPlugin plugin 8: id: com.github.hierynomus.license-base implementationClass: com.hierynomus.gradle.license.LicenseBasePlugin plugin 9: id: license implementationClass: nl.javadude.gradle.plugins.license.LicensePlugin plugin 10: id: org.kordamp.gradle.license implementationClass: org.kordamp.gradle.plugin.license.LicensePlugin enabled: false plugin 11: id: org.kordamp.gradle.build-info implementationClass: org.kordamp.gradle.plugin.buildinfo.BuildInfoPlugin enabled: true plugin 12: id: org.kordamp.gradle.source-jar implementationClass: org.kordamp.gradle.plugin.source.SourceJarPlugin enabled: true plugin 13: id: org.kordamp.gradle.apidoc implementationClass: org.kordamp.gradle.plugin.apidoc.ApidocPlugin enabled: true plugin 14: id: org.kordamp.gradle.minpom implementationClass: org.kordamp.gradle.plugin.minpom.MinPomPlugin enabled: true plugin 15: id: org.kordamp.gradle.jar implementationClass: org.kordamp.gradle.plugin.jar.JarPlugin enabled: true plugin 16: id: org.kordamp.gradle.publishing implementationClass: org.kordamp.gradle.plugin.publishing.PublishingPlugin enabled: false plugin 17: implementationClass: org.gradle.plugins.signing.SigningPlugin plugin 18: id: org.kordamp.gradle.source-stats implementationClass: org.kordamp.gradle.plugin.stats.SourceStatsPlugin enabled: true plugin 19: id: org.kordamp.gradle.source-html implementationClass: org.kordamp.gradle.plugin.sourcehtml.SourceHtmlPlugin enabled: true plugin 20: id: org.kordamp.gradle.bintray implementationClass: org.kordamp.gradle.plugin.bintray.BintrayPlugin enabled: false plugin 21: id: com.github.ben-manes.versions implementationClass: com.github.benmanes.gradle.versions.VersionsPlugin plugin 22: id: org.kordamp.gradle.project implementationClass: org.kordamp.gradle.plugin.project.ProjectPlugin plugin 23: id: net.nemerosa.versioning implementationClass: net.nemerosa.versioning.VersioningPlugin plugin 24: id: com.jfrog.bintray implementationClass: com.jfrog.bintray.gradle.BintrayPlugin
Take note that some plugins display their enabled status. These plugins belong to the kordamp-gradle-plugins suite and can be enabled/disabled using the Project DSL. Finally, there's the effectiveSettings
task that displays all configuration made through the Project DSL. By default it prints all settings but you can limit it by section, for example
$ gradlew effectiveSettings --sections=info,publishing,bintray > Task :effectiveSettings info: name: sample inceptionYear: 2018 copyrightYear: 2018 organization: links: scm: specification: enabled: true title: sample version: unspecified implementation: enabled: true title: sample version: unspecified publishing: enabled: false bintray: enabled: false
The information provided by these tasks depends on static configuration available in the build. If you'd like to know more about the build when it's actually executed (such as which tasks, how much time they took executing, errors, and other potential hot spots) then have a look at the Gradle Build Scans feature.
Keep on Coding!
Trackbacks/Pingbacks