{"id":13541978,"url":"https://github.com/ben-manes/gradle-versions-plugin","last_synced_at":"2025-05-12T15:35:39.442Z","repository":{"id":5760537,"uuid":"6973491","full_name":"ben-manes/gradle-versions-plugin","owner":"ben-manes","description":"Gradle plugin to discover dependency updates","archived":false,"fork":false,"pushed_at":"2025-04-07T14:00:18.000Z","size":2661,"stargazers_count":3963,"open_issues_count":101,"forks_count":205,"subscribers_count":47,"default_branch":"master","last_synced_at":"2025-04-23T17:40:23.960Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ben-manes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2012-12-02T23:01:23.000Z","updated_at":"2025-04-22T13:35:48.000Z","dependencies_parsed_at":"2023-11-17T08:48:13.028Z","dependency_job_id":"38328d0a-98c0-4386-8761-ff028897fb1f","html_url":"https://github.com/ben-manes/gradle-versions-plugin","commit_stats":{"total_commits":529,"total_committers":86,"mean_commits":6.151162790697675,"dds":0.7939508506616257,"last_synced_commit":"516df34cd5a09014384af799a4d21870593c0207"},"previous_names":[],"tags_count":52,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-manes%2Fgradle-versions-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-manes%2Fgradle-versions-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-manes%2Fgradle-versions-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ben-manes%2Fgradle-versions-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ben-manes","download_url":"https://codeload.github.com/ben-manes/gradle-versions-plugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253766473,"owners_count":21960925,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T10:00:59.609Z","updated_at":"2025-05-12T15:35:39.386Z","avatar_url":"https://github.com/ben-manes.png","language":"Kotlin","funding_links":[],"categories":["Kotlin","Plugins","others","Android Studio","Gradle Plugin"],"sub_categories":["Dependency management","Gradle Plugin"],"readme":"[![Build](https://github.com/ben-manes/gradle-versions-plugin/workflows/build/badge.svg)](https://github.com/ben-manes/gradle-versions-plugin/actions)\n[![gradlePluginPortal](https://img.shields.io/maven-metadata/v/https/plugins.gradle.org/m2/com/github/ben-manes/versions/com.github.ben-manes.versions.gradle.plugin/maven-metadata.xml.svg?label=gradlePluginPortal)](https://plugins.gradle.org/plugin/com.github.ben-manes.versions)\n\n# Gradle Versions Plugin\n\nIn the spirit of the [Maven Versions Plugin](https://www.mojohaus.org/versions-maven-plugin),\nthis plugin provides a task to determine which dependencies have updates. Additionally, the plugin\nchecks for updates to Gradle itself.\n\n**Table of contents**\n\u003c!-- TOC --\u003e\n- [Usage](#usage)\n  - [plugins block](#plugins-block)\n  - [buildscript block](#buildscript-block)\n  - [Using a Gradle init script](#using-a-gradle-init-script)\n  - [Related plugins](#related-plugins)\n- [dependencyUpdates](#dependencyupdates)\n  - [Multi-project build](#multi-project-build)\n  - [Revisions](#revisions)\n  - [RejectVersionsIf and componentSelection](#rejectversionsif-and-componentselection)\n  - [Gradle Release Channel](#gradle-release-channel)\n  - [Constraints](#constraints)\n  - [Kotlin DSL](#kotlin-dsl)\n  - [Try out the samples](#try-out-the-samples)\n  - [Report format](#report-format)\n\u003c!-- /TOC --\u003e\n\n## Usage\n\nYou can add this plugin to your top-level build script using the following configuration:\n\n### `plugins` block:\n\n\n```groovy\nplugins {\n  id \"com.github.ben-manes.versions\" version \"$version\"\n}\n```\nor via the\n\n### `buildscript` block:\n```groovy\napply plugin: \"com.github.ben-manes.versions\"\n\nbuildscript {\n  repositories {\n    gradlePluginPortal()\n  }\n\n  dependencies {\n    classpath \"com.github.ben-manes:gradle-versions-plugin:$version\"\n  }\n}\n```\n\n### Using a Gradle init script ###\nYou can also transparently add the plugin to every Gradle project that you run via a [Gradle init script](https://docs.gradle.org/current/userguide/init_scripts.html):\n\n\u003cdetails open\u003e\n\u003csummary\u003eGroovy\u003c/summary\u003e\n\n`$HOME/.gradle/init.d/add-versions-plugin.gradle`\n```groovy\ninitscript {\n  repositories {\n     gradlePluginPortal()\n  }\n\n  dependencies {\n    classpath 'com.github.ben-manes:gradle-versions-plugin:+'\n  }\n}\n\nallprojects {\n  apply plugin: com.github.benmanes.gradle.versions.VersionsPlugin\n\n  tasks.named(\"dependencyUpdates\").configure {\n    // configure the task, for example wrt. resolution strategies\n  }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003eKotlin\u003c/summary\u003e\n\n`$HOME/.gradle/init.d/add-versions-plugin.init.gradle.kts`\n```kotlin\nimport com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask\n\ninitscript {\n  repositories {\n    gradlePluginPortal()\n  }\n  dependencies {\n    classpath(\"com.github.ben-manes:gradle-versions-plugin:+\")\n  }\n}\n\nallprojects {\n  apply\u003ccom.github.benmanes.gradle.versions.VersionsPlugin\u003e()\n\n  tasks.named\u003cDependencyUpdatesTask\u003e(\"dependencyUpdates\").configure {\n    // configure the task, for example wrt. resolution strategies\n  }\n}\n```\n\n\u003c/details\u003e\n\n### Related Plugins ###\nYou may also wish to explore additional functionality provided by,\n - [version-catalog-update-plugin](https://github.com/littlerobots/version-catalog-update-plugin)\n - [gradle-versions-filter-plugin](https://github.com/janderssonse/gradle-versions-filter-plugin)\n - [gradle-upgrade-interactive](https://github.com/kevcodez/gradle-upgrade-interactive)\n - [gradle-use-latest-versions](https://github.com/patrikerdes/gradle-use-latest-versions-plugin)\n - [gradle-update-checker](https://github.com/marketplace/actions/gradle-update-checker)\n - [gradle-libraries-plugin](https://github.com/fkorotkov/gradle-libraries-plugin)\n - [gradle-update-notifier](https://github.com/y-yagi/gradle-update-notifier)\n - [refreshVersions](https://github.com/jmfayard/refreshVersions)\n - [update-versions-gradle-plugin](https://github.com/tomasbjerre/update-versions-gradle-plugin)\n\n## Tasks\n\n### `dependencyUpdates`\n\nDisplays a report of the project dependencies that are up-to-date, exceed the latest version found,\nhave upgrades, or failed to be resolved. When a dependency cannot be resolved the exception is\nlogged at the `info` level.\n\nTo refresh the cache (i.e. fetch the new releases/versions of the dependencies), use flag `--refresh-dependencies`.\n\nGradle updates are checked for on the `current`, `release-candidate` and `nightly` release channels. The plaintext\nreport displays gradle updates as a separate category in breadcrumb style (excluding nightly builds). The xml and json\nreports include information about all three release channels, whether a release is considered an update with respect to\nthe running (executing) gradle instance, whether an update check on a release channel has failed, as well as a reason\nfield explaining failures or missing information. The update check may be disabled using the `checkForGradleUpdate` flag.\n\n#### Multi-project build\n\nIn a multi-project build, running this task in the root project will generate a consolidated/merged\nreport for dependency updates in all subprojects. Alternatively, you can run the task separately in\neach subproject to generate separate reports for each subproject.\n\n#### Revisions\n\nThe `revision` task property controls the [Ivy resolution strategy][ivy_resolution_strategy] for determining what constitutes\nthe latest version of a dependency. Maven's dependency metadata does not distinguish between milestone and release versions.\nThe following strategies are natively supported by Gradle:\n\n  * release: selects the latest release\n  * milestone: select the latest version being either a milestone or a release (default)\n  * integration: selects the latest revision of the dependency module (such as SNAPSHOT)\n\nThe strategy can be specified either on the task or as a system property for ad hoc usage:\n\n```groovy\ngradle dependencyUpdates -Drevision=release\n```\n\n#### RejectVersionsIf and componentSelection\n\nTo further define which version to accept, you need to define what means an unstable version. Sadly, there are\nno agreed standard on this, but this is a good starting point:\n\n\u003cdetails open\u003e\n\u003csummary\u003eGroovy\u003c/summary\u003e\n\n```groovy\ndef isNonStable = { String version -\u003e\n  def stableKeyword = ['RELEASE', 'FINAL', 'GA'].any { it -\u003e version.toUpperCase().contains(it) }\n  def regex = /^[0-9,.v-]+(-r)?$/\n  return !stableKeyword \u0026\u0026 !(version ==~ regex)\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003eKotlin\u003c/summary\u003e\n\n```kotlin\nfun isNonStable(version: String): Boolean {\n    val stableKeyword = listOf(\"RELEASE\", \"FINAL\", \"GA\").any { version.uppercase().contains(it) }\n    val regex = \"^[0-9,.v-]+(-r)?$\".toRegex()\n    val isStable = stableKeyword || regex.matches(version)\n    return isStable.not()\n}\n```\n\n\u003c/details\u003e\n\nYou can then configure [Component Selection Rules][component_selection_rules].\nThe current version of a component can be retrieved with the `currentVersion` property.\nYou can either use the simplified syntax `rejectVersionIf { ... }` or configure a complete resolution strategy.\n\n\n\u003cdetails open\u003e\n\u003csummary\u003eGroovy\u003c/summary\u003e\n\n\u003c!--  Always modify first examples/groovy and make sure that it works. THEN modify the README --\u003e\n\nExample 1: reject all non stable versions\n\n```groovy\n// https://github.com/ben-manes/gradle-versions-plugin\ntasks.named(\"dependencyUpdates\").configure {\n  rejectVersionIf {\n    isNonStable(it.candidate.version)\n  }\n}\n```\n\nExample 2: disallow release candidates as upgradable versions from stable versions\n\n```groovy\n// https://github.com/ben-manes/gradle-versions-plugin\ntasks.named(\"dependencyUpdates\").configure {\n  rejectVersionIf {\n    isNonStable(it.candidate.version) \u0026\u0026 !isNonStable(it.currentVersion)\n  }\n}\n```\n\nExample 3: using the full syntax\n\n```groovy\n// https://github.com/ben-manes/gradle-versions-plugin\ntasks.named(\"dependencyUpdates\").configure {\n  resolutionStrategy {\n    componentSelection {\n      all {\n        if (isNonStable(it.candidate.version) \u0026\u0026 !isNonStable(it.currentVersion)) {\n          reject('Release candidate')\n        }\n      }\n    }\n  }\n}\n```\n\n\u003c/details\u003e\n\u003cdetails open\u003e\n\u003csummary\u003eKotlin\u003c/summary\u003e\n\n\u003c!--  Always modify first examples/kotlin and make sure that it works. THEN modify the README --\u003e\n\nExample 1: reject all non stable versions\n\n```kotlin\nimport com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask\n\n// https://github.com/ben-manes/gradle-versions-plugin\ntasks.withType\u003cDependencyUpdatesTask\u003e {\n  rejectVersionIf {\n    isNonStable(candidate.version)\n  }\n}\n```\n\nExample 2: disallow release candidates as upgradable versions from stable versions\n\n```kotlin\nimport com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask\n\n// https://github.com/ben-manes/gradle-versions-plugin\ntasks.withType\u003cDependencyUpdatesTask\u003e {\n  rejectVersionIf {\n    isNonStable(candidate.version) \u0026\u0026 !isNonStable(currentVersion)\n  }\n}\n```\n\nExample 3: using the full syntax\n\n```kotlin\nimport com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask\n\n// https://github.com/ben-manes/gradle-versions-plugin\ntasks.withType\u003cDependencyUpdatesTask\u003e {\n  resolutionStrategy {\n    componentSelection {\n      all {\n        if (isNonStable(candidate.version) \u0026\u0026 !isNonStable(currentVersion)) {\n          reject(\"Release candidate\")\n        }\n      }\n    }\n  }\n}\n```\n\u003c/details\u003e\n\n#### Gradle Release Channel\n\nThe `gradleReleaseChannel` task property controls which release channel of the Gradle project is used to check for available Gradle updates. Options are:\n\n  * `current`\n  * `release-candidate`\n  * `nightly`\n\nThe default is `release-candidate`. The value can be changed as shown below:\n\n```groovy\ndependencyUpdates.gradleReleaseChannel=\"current\"\n```\n\n#### Gradle Versions Api Base URL\n\nThe `gradleVersionsApiBaseUrl` task property provides an option for customization of the Gradle versions service URL.\nIf not specified, the default value https://services.gradle.org/versions/ is used.\nThe customization can be useful in restricted environments without direct internet access and proxy availability.\n\n#### Constraints\n\nIf you use constraints, for example to define a BOM using the [`java-platform`](https://docs.gradle.org/current/userguide/java_platform_plugin.html)\nplugin or to [manage](https://docs.gradle.org/current/userguide/dependency_constraints.html)\ntransitive dependency versions, you can enable checking of constraints by specifying the `checkConstraints`\nattribute of the `dependencyUpdates` task.\nIf you want to check external constraints (defined in init scripts or by Gradle since 7.3.2) you can do so by specifying the `checkBuildEnvironmentConstraints`\nattribute of the `dependencyUpdates` task.\n\n```groovy\ntasks.named(\"dependencyUpdates\").configure {\n    checkConstraints = true\n    checkBuildEnvironmentConstraints = true\n}\n```\n\n#### Kotlin DSL\n\nIf using Gradle's [kotlin-dsl][kotlin_dsl], you could configure the `dependencyUpdates` like this:\n\n```kotlin\nimport com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask\n\ntasks.named\u003cDependencyUpdatesTask\u003e(\"dependencyUpdates\").configure {\n\n  // optional parameters\n  checkForGradleUpdate = true\n  outputFormatter = \"json\"\n  outputDir = \"build/dependencyUpdates\"\n  reportfileName = \"report\"\n}\n```\n\nNote: Do use the `plugins { .. }` syntax if you use the Kotlin DSL.\n\n#### Configuration filter\nYou can change which dependency configurations the plugin checks for updates like this:\n\n```groovy\n// https://github.com/ben-manes/gradle-versions-plugin\ntasks.named(\"dependencyUpdates\").configure {\n  filterConfigurations {\n    it.name.equals(\"runtimeClasspath\") || it.name.equals(\"compileClasspath\")\n  }\n}\n```\n\n\n#### Try out the samples\n\nHave a look at [`examples/groovy`](https://github.com/ben-manes/gradle-versions-plugin/tree/master/examples/groovy) and [`examples/kotlin`](https://github.com/ben-manes/gradle-versions-plugin/tree/master/examples/kotlin)\n\n```bash\n# Publish the latest version of the plugin to mavenLocal()\n$ ./gradlew publishToMavenLocal\n\n# Try out the samples\n$ ./gradlew -p examples/groovy dependencyUpdate\n$ ./gradlew -p examples/kotlin dependencyUpdate\n```\n\n### Report format\n\nThe task property `outputFormatter` controls the report output format. The following values are supported:\n\n  * `\"plain\"`: format output file as plain text (default)\n  * `\"json\"`: format output file as json text\n  * `\"xml\"`: format output file as xml text, can be used by other plugins (e.g. sonar)\n  * `\"html\"`: format output file as html\n  * `Closure`: will be called with the result of the dependency update analysis\n\nYou can also set multiple output formats using comma as the separator:\n\n```groovy\ngradle dependencyUpdates -Drevision=release -DoutputFormatter=json,xml,html\n```\n\nThe task property `outputDir` controls the output directory for the report  file(s). The directory will be created if it does not exist.\nThe default value is set to `build/dependencyUpdates`\n\n```groovy\ngradle dependencyUpdates -Drevision=release -DoutputFormatter=json -DoutputDir=/any/path/with/permission\n```\n\nLast the property `reportfileName` sets the filename (without extension) of the generated report. It defaults to `report`.\nThe extension will be set according to the used output format.\n\n```groovy\ngradle dependencyUpdates -Drevision=release -DoutputFormatter=json -DreportfileName=myCustomReport\n```\n\nThis displays a report to the console.\n\n\n\u003cdetails open\u003e\n\u003csummary\u003eText Report\u003c/summary\u003e\n\n```\n------------------------------------------------------------\n: Project Dependency Updates (report to plain text file)\n------------------------------------------------------------\n\nThe following dependencies are using the latest integration version:\n - backport-util-concurrent:backport-util-concurrent:3.1\n - backport-util-concurrent:backport-util-concurrent-java12:3.1\n\nThe following dependencies exceed the version found at the integration revision level:\n - com.google.guava:guava [99.0-SNAPSHOT \u003c- 16.0-rc1]\n     https://code.google.com/p/guava-libraries\n - com.google.guava:guava-tests [99.0-SNAPSHOT \u003c- 16.0-rc1]\n     https://code.google.com/p/guava-libraries\n\nThe following dependencies have later integration versions:\n - com.google.inject:guice [2.0 -\u003e 3.0]\n     https://code.google.com/p/google-guice/\n - com.google.inject.extensions:guice-multibindings [2.0 -\u003e 3.0]\n     https://code.google.com/p/google-guice/\n\nGradle updates:\n - Gradle: [4.6 -\u003e 4.7 -\u003e 4.8-rc-2]\n```\n\u003c/details\u003e\n\nAlternatively, the report may be outputed to a structured file.\n\n\u003cdetails\u003e\n\u003csummary\u003eJson report\u003c/summary\u003e\n\n```json\n{\n  \"current\": {\n    \"dependencies\": [\n      {\n        \"group\": \"backport-util-concurrent\",\n        \"version\": \"3.1\",\n        \"name\": \"backport-util-concurrent\",\n        \"projectUrl\": \"https://backport-jsr166.sourceforge.net/\"\n      },\n      {\n        \"group\": \"backport-util-concurrent\",\n        \"version\": \"3.1\",\n        \"name\": \"backport-util-concurrent-java12\",\n        \"projectUrl\": \"https://backport-jsr166.sourceforge.net/\"\n      }\n    ],\n    \"count\": 2\n  },\n  \"gradle\": {\n    \"enabled\": true,\n    \"current\": {\n      \"version\": \"4.7\",\n      \"reason\": \"\",\n      \"isUpdateAvailable\": true,\n      \"isFailure\": false\n    },\n    \"nightly\": {\n      \"version\": \"4.9-20180526235939+0000\",\n      \"reason\": \"\",\n      \"isUpdateAvailable\": true,\n      \"isFailure\": false\n    },\n    \"releaseCandidate\": {\n      \"version\": \"4.8-rc-2\",\n      \"reason\": \"\",\n      \"isUpdateAvailable\": true,\n      \"isFailure\": false\n    },\n    \"running\": {\n      \"version\": \"4.6\",\n      \"reason\": \"\",\n      \"isUpdateAvailable\": false,\n      \"isFailure\": false\n    }\n  },\n  \"exceeded\": {\n    \"dependencies\": [\n      {\n        \"group\": \"com.google.guava\",\n        \"latest\": \"16.0-rc1\",\n        \"version\": \"99.0-SNAPSHOT\",\n        \"name\": \"guava\",\n        \"projectUrl\": \"https://code.google.com/p/guava-libraries\"\n      },\n      {\n        \"group\": \"com.google.guava\",\n        \"latest\": \"16.0-rc1\",\n        \"version\": \"99.0-SNAPSHOT\",\n        \"name\": \"guava-tests\",\n        \"projectUrl\": \"https://code.google.com/p/guava-libraries\"\n      }\n    ],\n    \"count\": 2\n  },\n  \"outdated\": {\n    \"dependencies\": [\n      {\n        \"group\": \"com.google.inject\",\n        \"available\": {\n          \"release\": \"3.0\",\n          \"milestone\": null,\n          \"integration\": null\n        },\n        \"version\": \"2.0\",\n        \"name\": \"guice\",\n        \"projectUrl\": \"https://code.google.com/p/google-guice/\"\n      },\n      {\n        \"group\": \"com.google.inject.extensions\",\n        \"available\": {\n          \"release\": \"3.0\",\n          \"milestone\": null,\n          \"integration\": null\n        },\n        \"version\": \"2.0\",\n        \"name\": \"guice-multibindings\",\n        \"projectUrl\": \"https://code.google.com/p/google-guice/\"\n      }\n    ],\n    \"count\": 2\n  },\n  \"unresolved\": {\n    \"dependencies\": [\n      {\n        \"group\": \"com.github.ben-manes\",\n        \"version\": \"1.0\",\n        \"reason\": \"Could not find any version that matches com.github.ben-manes:unresolvable:latest.milestone.\",\n        \"name\": \"unresolvable\"\n      },\n      {\n        \"group\": \"com.github.ben-manes\",\n        \"version\": \"1.0\",\n        \"reason\": \"Could not find any version that matches com.github.ben-manes:unresolvable2:latest.milestone.\",\n        \"name\": \"unresolvable2\"\n      }\n    ],\n    \"count\": 2\n  },\n  \"count\": 8\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eXML report\u003c/summary\u003e\n\n\n```xml\n\u003cresponse\u003e\n  \u003ccount\u003e8\u003c/count\u003e\n  \u003ccurrent\u003e\n    \u003ccount\u003e2\u003c/count\u003e\n    \u003cdependencies\u003e\n      \u003cdependency\u003e\n        \u003cname\u003ebackport-util-concurrent\u003c/name\u003e\n        \u003cgroup\u003ebackport-util-concurrent\u003c/group\u003e\n        \u003cversion\u003e3.1\u003c/version\u003e\n        \u003cprojectUrl\u003ehttps://backport-jsr166.sourceforge.net/\u003c/projectUrl\u003e\n      \u003c/dependency\u003e\n      \u003cdependency\u003e\n        \u003cname\u003ebackport-util-concurrent-java12\u003c/name\u003e\n        \u003cgroup\u003ebackport-util-concurrent\u003c/group\u003e\n        \u003cversion\u003e3.1\u003c/version\u003e\n        \u003cprojectUrl\u003ehttps://backport-jsr166.sourceforge.net/\u003c/projectUrl\u003e\n      \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n  \u003c/current\u003e\n  \u003coutdated\u003e\n    \u003ccount\u003e2\u003c/count\u003e\n    \u003cdependencies\u003e\n      \u003coutdatedDependency\u003e\n        \u003cname\u003eguice\u003c/name\u003e\n        \u003cgroup\u003ecom.google.inject\u003c/group\u003e\n        \u003cversion\u003e2.0\u003c/version\u003e\n        \u003cavailable\u003e\n          \u003crelease\u003e3.0\u003c/release\u003e\n        \u003c/available\u003e\n        \u003cprojectUrl\u003ehttps://code.google.com/p/google-guice/\u003c/projectUrl\u003e\n      \u003c/outdatedDependency\u003e\n      \u003coutdatedDependency\u003e\n        \u003cname\u003eguice-multibindings\u003c/name\u003e\n        \u003cgroup\u003ecom.google.inject.extensions\u003c/group\u003e\n        \u003cversion\u003e2.0\u003c/version\u003e\n        \u003cavailable\u003e\n          \u003crelease\u003e3.0\u003c/release\u003e\n        \u003c/available\u003e\n        \u003cprojectUrl\u003ehttps://code.google.com/p/guava-libraries\u003c/projectUrl\u003e\n      \u003c/outdatedDependency\u003e\n    \u003c/dependencies\u003e\n  \u003c/outdated\u003e\n  \u003cexceeded\u003e\n    \u003ccount\u003e2\u003c/count\u003e\n    \u003cdependencies\u003e\n      \u003cexceededDependency\u003e\n        \u003cname\u003eguava\u003c/name\u003e\n        \u003cgroup\u003ecom.google.guava\u003c/group\u003e\n        \u003cversion\u003e99.0-SNAPSHOT\u003c/version\u003e\n        \u003clatest\u003e16.0-rc1\u003c/latest\u003e\n        \u003cprojectUrl\u003ehttps://code.google.com/p/guava-libraries\u003c/projectUrl\u003e\n      \u003c/exceededDependency\u003e\n      \u003cexceededDependency\u003e\n        \u003cname\u003eguava-tests\u003c/name\u003e\n        \u003cgroup\u003ecom.google.guava\u003c/group\u003e\n        \u003cversion\u003e99.0-SNAPSHOT\u003c/version\u003e\n        \u003clatest\u003e16.0-rc1\u003c/latest\u003e\n        \u003cprojectUrl\u003ehttps://code.google.com/p/guava-libraries\u003c/projectUrl\u003e\n      \u003c/exceededDependency\u003e\n    \u003c/dependencies\u003e\n  \u003c/exceeded\u003e\n  \u003cunresolved\u003e\n    \u003ccount\u003e2\u003c/count\u003e\n    \u003cdependencies\u003e\n      \u003cunresolvedDependency\u003e\n        \u003cname\u003eunresolvable\u003c/name\u003e\n        \u003cgroup\u003ecom.github.ben-manes\u003c/group\u003e\n        \u003cversion\u003e1.0\u003c/version\u003e\n        \u003creason\u003eCould not find any version that matches com.github.ben-manes:unresolvable:latest.release.\u003c/reason\u003e\n      \u003c/unresolvedDependency\u003e\n      \u003cunresolvedDependency\u003e\n        \u003cname\u003eunresolvable2\u003c/name\u003e\n        \u003cgroup\u003ecom.github.ben-manes\u003c/group\u003e\n        \u003cversion\u003e1.0\u003c/version\u003e\n        \u003creason\u003eCould not find any version that matches com.github.ben-manes:unresolvable2:latest.release.\u003c/reason\u003e\n      \u003c/unresolvedDependency\u003e\n    \u003c/dependencies\u003e\n  \u003c/unresolved\u003e\n  \u003cgradle\u003e\n    \u003cenabled\u003etrue\u003c/enabled\u003e\n    \u003crunning\u003e\n      \u003cversion\u003e4.6\u003c/version\u003e\n      \u003cisUpdateAvailable\u003efalse\u003c/isUpdateAvailable\u003e\n      \u003cisFailure\u003efalse\u003c/isFailure\u003e\n      \u003creason\u003e\u003c/reason\u003e\n    \u003c/running\u003e\n    \u003ccurrent\u003e\n      \u003cversion\u003e4.7\u003c/version\u003e\n      \u003cisUpdateAvailable\u003etrue\u003c/isUpdateAvailable\u003e\n      \u003cisFailure\u003efalse\u003c/isFailure\u003e\n      \u003creason\u003e\u003c/reason\u003e\n    \u003c/current\u003e\n    \u003creleaseCandidate\u003e\n      \u003cversion\u003e4.8-rc-2\u003c/version\u003e\n      \u003cisUpdateAvailable\u003etrue\u003c/isUpdateAvailable\u003e\n      \u003cisFailure\u003efalse\u003c/isFailure\u003e\n      \u003creason\u003e\u003c/reason\u003e\n    \u003c/releaseCandidate\u003e\n    \u003cnightly\u003e\n      \u003cversion\u003e4.9-20180526235939+0000\u003c/version\u003e\n      \u003cisUpdateAvailable\u003etrue\u003c/isUpdateAvailable\u003e\n      \u003cisFailure\u003efalse\u003c/isFailure\u003e\n      \u003creason\u003e\u003c/reason\u003e\n    \u003c/nightly\u003e\n  \u003c/gradle\u003e\n\u003c/response\u003e\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eHTML report\u003c/summary\u003e\n\n[\u003cimg src=\"examples/html-report.png\"/\u003e](examples/html-report.png)\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCustom report\u003c/summary\u003e\n\nIf you need to create a report in a custom format, you can set the `dependencyUpdates` tasks's `outputFormatter` property to a Closure. The closure will be called with a single argument that is an instance of [com.github.benmanes.gradle.versions.reporter.result.Result](gradle-versions-plugin/src/main/kotlin/com/github/benmanes/gradle/versions/reporter/result/Result.kt).\n\nFor example, if you wanted to create an html table for the upgradable dependencies, you could use:\n\n```groovy\ntasks.named(\"dependencyUpdates\").configure {\n  outputFormatter = { result -\u003e\n    def updatable = result.outdated.dependencies\n    if (!updatable.isEmpty()){\n      def writer = new StringWriter()\n      def html = new groovy.xml.MarkupBuilder(writer)\n\n      html.html {\n        body {\n          table {\n            thead {\n              tr {\n                td(\"Group\")\n                td(\"Module\")\n                td(\"Current version\")\n                td(\"Latest version\")\n              }\n            }\n            tbody {\n              updatable.each { dependency-\u003e\n                tr {\n                  td(dependency.group)\n                  td(dependency.name)\n                  td(dependency.version)\n                  td(dependency.available.release ?: dependency.available.milestone)\n                }\n              }\n            }\n          }\n        }\n      }\n      println writer.toString()\n    }\n  }\n}\n```\n\u003c/details\u003e\n\n[kotlin_dsl]: https://github.com/gradle/kotlin-dsl\n[ivy_resolution_strategy]: https://ant.apache.org/ivy/history/2.4.0/settings/version-matchers.html#Latest%20(Status)%20Matcher\n[component_selection_rules]: https://docs.gradle.org/current/userguide/dynamic_versions.html#sec:component_selection_rules\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fben-manes%2Fgradle-versions-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fben-manes%2Fgradle-versions-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fben-manes%2Fgradle-versions-plugin/lists"}