[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7314":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":16,"starSnapshotCount":16,"syncStatus":28,"lastSyncTime":29,"discoverSource":30},7314,"gradle-versions-plugin","ben-manes\u002Fgradle-versions-plugin","ben-manes","Gradle plugin to discover dependency updates","",null,"Kotlin",4071,208,45,95,0,1,5,28.96,"Apache License 2.0",false,"master",true,[],"2026-06-12 02:01:37","[![Build](https:\u002F\u002Fgithub.com\u002Fben-manes\u002Fgradle-versions-plugin\u002Fworkflows\u002Fbuild\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fben-manes\u002Fgradle-versions-plugin\u002Factions)\n[![gradlePluginPortal](https:\u002F\u002Fimg.shields.io\u002Fmaven-metadata\u002Fv\u002Fhttps\u002Fplugins.gradle.org\u002Fm2\u002Fcom\u002Fgithub\u002Fben-manes\u002Fversions\u002Fcom.github.ben-manes.versions.gradle.plugin\u002Fmaven-metadata.xml.svg?label=gradlePluginPortal)](https:\u002F\u002Fplugins.gradle.org\u002Fplugin\u002Fcom.github.ben-manes.versions)\n\n# Gradle Versions Plugin\n\nIn the spirit of the [Maven Versions Plugin](https:\u002F\u002Fwww.mojohaus.org\u002Fversions-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 -->\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  - [Known issues](#workarounds-for-related-gradle-issues)\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!-- \u002FTOC -->\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:\u002F\u002Fdocs.gradle.org\u002Fcurrent\u002Fuserguide\u002Finit_scripts.html):\n\n\u003Cdetails open>\n\u003Csummary>Groovy\u003C\u002Fsummary>\n\n`$HOME\u002F.gradle\u002Finit.d\u002Fadd-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    \u002F\u002F configure the task, for example wrt. resolution strategies\n  }\n}\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails open>\n\u003Csummary>Kotlin\u003C\u002Fsummary>\n\n`$HOME\u002F.gradle\u002Finit.d\u002Fadd-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>()\n\n  tasks.named\u003CDependencyUpdatesTask>(\"dependencyUpdates\").configure {\n    \u002F\u002F configure the task, for example wrt. resolution strategies\n  }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Related Plugins ###\nYou may also wish to explore additional functionality provided by,\n - [version-catalog-update-plugin](https:\u002F\u002Fgithub.com\u002Flittlerobots\u002Fversion-catalog-update-plugin)\n - [gradle-versions-filter-plugin](https:\u002F\u002Fgithub.com\u002Fjanderssonse\u002Fgradle-versions-filter-plugin)\n - [gradle-upgrade-interactive](https:\u002F\u002Fgithub.com\u002Fkevcodez\u002Fgradle-upgrade-interactive)\n - [gradle-use-latest-versions](https:\u002F\u002Fgithub.com\u002Fpatrikerdes\u002Fgradle-use-latest-versions-plugin)\n - [gradle-update-checker](https:\u002F\u002Fgithub.com\u002Fmarketplace\u002Factions\u002Fgradle-update-checker)\n - [gradle-libraries-plugin](https:\u002F\u002Fgithub.com\u002Ffkorotkov\u002Fgradle-libraries-plugin)\n - [gradle-update-notifier](https:\u002F\u002Fgithub.com\u002Fy-yagi\u002Fgradle-update-notifier)\n - [refreshVersions](https:\u002F\u002Fgithub.com\u002Fjmfayard\u002FrefreshVersions)\n - [update-versions-gradle-plugin](https:\u002F\u002Fgithub.com\u002Ftomasbjerre\u002Fupdate-versions-gradle-plugin)\n - [caupain](https:\u002F\u002Fgithub.com\u002Fdeezer\u002Fcaupain\u002F)\n\n### Workarounds for related Gradle Issues ###\n - https:\u002F\u002Fgithub.com\u002Fgradle\u002Fgradle\u002Fissues\u002F24636: setting the flag `org.gradle.configuration-cache.problems=warn` in `gradle.properties` causes the dependency check to fail to find dependencies with message `No dependencies found`.  Comment out that line until the upstream issue with Gradle is fixed.\n - In Gradle 9+, parallel execution is incompatible with having one project's task resolving another project configuration's dependencies. This requires obtaining an internal lock not available to plugin developers, but is relied on by native plugins (e.g. for IDE support). This simply requires passing the `--no-parallel` flag when running the `dependencyUpdates` task, which allows you to continue to benefit from the speedup in other build scenarios.\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\u002Fversions 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\u002Fmerged\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 --no-parallel\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>\n\u003Csummary>Groovy\u003C\u002Fsummary>\n\n```groovy\ndef isNonStable = { String version ->\n  def stableKeyword = ['RELEASE', 'FINAL', 'GA'].any { it -> version.toUpperCase().contains(it) }\n  def regex = \u002F^[0-9,.v-]+(-r)?$\u002F\n  return !stableKeyword && !(version ==~ regex)\n}\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails open>\n\u003Csummary>Kotlin\u003C\u002Fsummary>\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\u002Fdetails>\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>\n\u003Csummary>Groovy\u003C\u002Fsummary>\n\n\u003C!--  Always modify first examples\u002Fgroovy and make sure that it works. THEN modify the README -->\n\nExample 1: reject all non stable versions\n\n```groovy\n\u002F\u002F https:\u002F\u002Fgithub.com\u002Fben-manes\u002Fgradle-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\u002F\u002F https:\u002F\u002Fgithub.com\u002Fben-manes\u002Fgradle-versions-plugin\ntasks.named(\"dependencyUpdates\").configure {\n  rejectVersionIf {\n    isNonStable(it.candidate.version) && !isNonStable(it.currentVersion)\n  }\n}\n```\n\nExample 3: using the full syntax\n\n```groovy\n\u002F\u002F https:\u002F\u002Fgithub.com\u002Fben-manes\u002Fgradle-versions-plugin\ntasks.named(\"dependencyUpdates\").configure {\n  resolutionStrategy {\n    componentSelection {\n      all {\n        if (isNonStable(it.candidate.version) && !isNonStable(it.currentVersion)) {\n          reject('Release candidate')\n        }\n      }\n    }\n  }\n}\n```\n\n\u003C\u002Fdetails>\n\u003Cdetails open>\n\u003Csummary>Kotlin\u003C\u002Fsummary>\n\n\u003C!--  Always modify first examples\u002Fkotlin and make sure that it works. THEN modify the README -->\n\nExample 1: reject all non stable versions\n\n```kotlin\nimport com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask\n\n\u002F\u002F https:\u002F\u002Fgithub.com\u002Fben-manes\u002Fgradle-versions-plugin\ntasks.withType\u003CDependencyUpdatesTask> {\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\u002F\u002F https:\u002F\u002Fgithub.com\u002Fben-manes\u002Fgradle-versions-plugin\ntasks.withType\u003CDependencyUpdatesTask> {\n  rejectVersionIf {\n    isNonStable(candidate.version) && !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\u002F\u002F https:\u002F\u002Fgithub.com\u002Fben-manes\u002Fgradle-versions-plugin\ntasks.withType\u003CDependencyUpdatesTask> {\n  resolutionStrategy {\n    componentSelection {\n      all(Action\u003CComponentSelectionWithCurrent> {\n        if (isNonStable(candidate.version) && !isNonStable(currentVersion)) {\n          reject(\"Release candidate\")\n        }\n      })\n    }\n  }\n}\n```\n\u003C\u002Fdetails>\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:\u002F\u002Fservices.gradle.org\u002Fversions\u002F 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:\u002F\u002Fdocs.gradle.org\u002Fcurrent\u002Fuserguide\u002Fjava_platform_plugin.html)\nplugin or to [manage](https:\u002F\u002Fdocs.gradle.org\u002Fcurrent\u002Fuserguide\u002Fdependency_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>(\"dependencyUpdates\").configure {\n\n  \u002F\u002F optional parameters\n  checkForGradleUpdate = true\n  outputFormatter = \"json\"\n  outputDir = \"build\u002FdependencyUpdates\"\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\u002F\u002F https:\u002F\u002Fgithub.com\u002Fben-manes\u002Fgradle-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\u002Fgroovy`](https:\u002F\u002Fgithub.com\u002Fben-manes\u002Fgradle-versions-plugin\u002Ftree\u002Fmaster\u002Fexamples\u002Fgroovy) and [`examples\u002Fkotlin`](https:\u002F\u002Fgithub.com\u002Fben-manes\u002Fgradle-versions-plugin\u002Ftree\u002Fmaster\u002Fexamples\u002Fkotlin)\n\n```bash\n# Publish the latest version of the plugin to mavenLocal()\n$ .\u002Fgradlew publishToMavenLocal\n\n# Try out the samples\n$ .\u002Fgradlew -p examples\u002Fgroovy dependencyUpdate\n$ .\u002Fgradlew -p examples\u002Fkotlin 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 --no-parallel\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\u002FdependencyUpdates`\n\n```groovy\ngradle dependencyUpdates -Drevision=release -DoutputFormatter=json -DoutputDir=\u002Fany\u002Fpath\u002Fwith\u002Fpermission --no-parallel\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 --no-parallel\n```\n\nThis displays a report to the console.\n\n\n\u003Cdetails open>\n\u003Csummary>Text Report\u003C\u002Fsummary>\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:\u002F\u002Fcode.google.com\u002Fp\u002Fguava-libraries\n - com.google.guava:guava-tests [99.0-SNAPSHOT \u003C- 16.0-rc1]\n     https:\u002F\u002Fcode.google.com\u002Fp\u002Fguava-libraries\n\nThe following dependencies have later integration versions:\n - com.google.inject:guice [2.0 -> 3.0]\n     https:\u002F\u002Fcode.google.com\u002Fp\u002Fgoogle-guice\u002F\n - com.google.inject.extensions:guice-multibindings [2.0 -> 3.0]\n     https:\u002F\u002Fcode.google.com\u002Fp\u002Fgoogle-guice\u002F\n\nGradle updates:\n - Gradle: [4.6 -> 4.7 -> 4.8-rc-2]\n```\n\u003C\u002Fdetails>\n\nAlternatively, the report may be outputed to a structured file.\n\n\u003Cdetails>\n\u003Csummary>Json report\u003C\u002Fsummary>\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:\u002F\u002Fbackport-jsr166.sourceforge.net\u002F\"\n      },\n      {\n        \"group\": \"backport-util-concurrent\",\n        \"version\": \"3.1\",\n        \"name\": \"backport-util-concurrent-java12\",\n        \"projectUrl\": \"https:\u002F\u002Fbackport-jsr166.sourceforge.net\u002F\"\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:\u002F\u002Fcode.google.com\u002Fp\u002Fguava-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:\u002F\u002Fcode.google.com\u002Fp\u002Fguava-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:\u002F\u002Fcode.google.com\u002Fp\u002Fgoogle-guice\u002F\"\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:\u002F\u002Fcode.google.com\u002Fp\u002Fgoogle-guice\u002F\"\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\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>XML report\u003C\u002Fsummary>\n\n\n```xml\n\u003Cresponse>\n  \u003Ccount>8\u003C\u002Fcount>\n  \u003Ccurrent>\n    \u003Ccount>2\u003C\u002Fcount>\n    \u003Cdependencies>\n      \u003Cdependency>\n        \u003Cname>backport-util-concurrent\u003C\u002Fname>\n        \u003Cgroup>backport-util-concurrent\u003C\u002Fgroup>\n        \u003Cversion>3.1\u003C\u002Fversion>\n        \u003CprojectUrl>https:\u002F\u002Fbackport-jsr166.sourceforge.net\u002F\u003C\u002FprojectUrl>\n      \u003C\u002Fdependency>\n      \u003Cdependency>\n        \u003Cname>backport-util-concurrent-java12\u003C\u002Fname>\n        \u003Cgroup>backport-util-concurrent\u003C\u002Fgroup>\n        \u003Cversion>3.1\u003C\u002Fversion>\n        \u003CprojectUrl>https:\u002F\u002Fbackport-jsr166.sourceforge.net\u002F\u003C\u002FprojectUrl>\n      \u003C\u002Fdependency>\n    \u003C\u002Fdependencies>\n  \u003C\u002Fcurrent>\n  \u003Coutdated>\n    \u003Ccount>2\u003C\u002Fcount>\n    \u003Cdependencies>\n      \u003CoutdatedDependency>\n        \u003Cname>guice\u003C\u002Fname>\n        \u003Cgroup>com.google.inject\u003C\u002Fgroup>\n        \u003Cversion>2.0\u003C\u002Fversion>\n        \u003Cavailable>\n          \u003Crelease>3.0\u003C\u002Frelease>\n        \u003C\u002Favailable>\n        \u003CprojectUrl>https:\u002F\u002Fcode.google.com\u002Fp\u002Fgoogle-guice\u002F\u003C\u002FprojectUrl>\n      \u003C\u002FoutdatedDependency>\n      \u003CoutdatedDependency>\n        \u003Cname>guice-multibindings\u003C\u002Fname>\n        \u003Cgroup>com.google.inject.extensions\u003C\u002Fgroup>\n        \u003Cversion>2.0\u003C\u002Fversion>\n        \u003Cavailable>\n          \u003Crelease>3.0\u003C\u002Frelease>\n        \u003C\u002Favailable>\n        \u003CprojectUrl>https:\u002F\u002Fcode.google.com\u002Fp\u002Fguava-libraries\u003C\u002FprojectUrl>\n      \u003C\u002FoutdatedDependency>\n    \u003C\u002Fdependencies>\n  \u003C\u002Foutdated>\n  \u003Cexceeded>\n    \u003Ccount>2\u003C\u002Fcount>\n    \u003Cdependencies>\n      \u003CexceededDependency>\n        \u003Cname>guava\u003C\u002Fname>\n        \u003Cgroup>com.google.guava\u003C\u002Fgroup>\n        \u003Cversion>99.0-SNAPSHOT\u003C\u002Fversion>\n        \u003Clatest>16.0-rc1\u003C\u002Flatest>\n        \u003CprojectUrl>https:\u002F\u002Fcode.google.com\u002Fp\u002Fguava-libraries\u003C\u002FprojectUrl>\n      \u003C\u002FexceededDependency>\n      \u003CexceededDependency>\n        \u003Cname>guava-tests\u003C\u002Fname>\n        \u003Cgroup>com.google.guava\u003C\u002Fgroup>\n        \u003Cversion>99.0-SNAPSHOT\u003C\u002Fversion>\n        \u003Clatest>16.0-rc1\u003C\u002Flatest>\n        \u003CprojectUrl>https:\u002F\u002Fcode.google.com\u002Fp\u002Fguava-libraries\u003C\u002FprojectUrl>\n      \u003C\u002FexceededDependency>\n    \u003C\u002Fdependencies>\n  \u003C\u002Fexceeded>\n  \u003Cunresolved>\n    \u003Ccount>2\u003C\u002Fcount>\n    \u003Cdependencies>\n      \u003CunresolvedDependency>\n        \u003Cname>unresolvable\u003C\u002Fname>\n        \u003Cgroup>com.github.ben-manes\u003C\u002Fgroup>\n        \u003Cversion>1.0\u003C\u002Fversion>\n        \u003Creason>Could not find any version that matches com.github.ben-manes:unresolvable:latest.release.\u003C\u002Freason>\n      \u003C\u002FunresolvedDependency>\n      \u003CunresolvedDependency>\n        \u003Cname>unresolvable2\u003C\u002Fname>\n        \u003Cgroup>com.github.ben-manes\u003C\u002Fgroup>\n        \u003Cversion>1.0\u003C\u002Fversion>\n        \u003Creason>Could not find any version that matches com.github.ben-manes:unresolvable2:latest.release.\u003C\u002Freason>\n      \u003C\u002FunresolvedDependency>\n    \u003C\u002Fdependencies>\n  \u003C\u002Funresolved>\n  \u003Cgradle>\n    \u003Cenabled>true\u003C\u002Fenabled>\n    \u003Crunning>\n      \u003Cversion>4.6\u003C\u002Fversion>\n      \u003CisUpdateAvailable>false\u003C\u002FisUpdateAvailable>\n      \u003CisFailure>false\u003C\u002FisFailure>\n      \u003Creason>\u003C\u002Freason>\n    \u003C\u002Frunning>\n    \u003Ccurrent>\n      \u003Cversion>4.7\u003C\u002Fversion>\n      \u003CisUpdateAvailable>true\u003C\u002FisUpdateAvailable>\n      \u003CisFailure>false\u003C\u002FisFailure>\n      \u003Creason>\u003C\u002Freason>\n    \u003C\u002Fcurrent>\n    \u003CreleaseCandidate>\n      \u003Cversion>4.8-rc-2\u003C\u002Fversion>\n      \u003CisUpdateAvailable>true\u003C\u002FisUpdateAvailable>\n      \u003CisFailure>false\u003C\u002FisFailure>\n      \u003Creason>\u003C\u002Freason>\n    \u003C\u002FreleaseCandidate>\n    \u003Cnightly>\n      \u003Cversion>4.9-20180526235939+0000\u003C\u002Fversion>\n      \u003CisUpdateAvailable>true\u003C\u002FisUpdateAvailable>\n      \u003CisFailure>false\u003C\u002FisFailure>\n      \u003Creason>\u003C\u002Freason>\n    \u003C\u002Fnightly>\n  \u003C\u002Fgradle>\n\u003C\u002Fresponse>\n```\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>HTML report\u003C\u002Fsummary>\n\n[\u003Cimg src=\"examples\u002Fhtml-report.png\"\u002F>](examples\u002Fhtml-report.png)\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>Custom report\u003C\u002Fsummary>\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\u002Fsrc\u002Fmain\u002Fkotlin\u002Fcom\u002Fgithub\u002Fbenmanes\u002Fgradle\u002Fversions\u002Freporter\u002Fresult\u002FResult.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 ->\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->\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\u002Fdetails>\n\n[kotlin_dsl]: https:\u002F\u002Fgithub.com\u002Fgradle\u002Fkotlin-dsl\n[ivy_resolution_strategy]: https:\u002F\u002Fant.apache.org\u002Fivy\u002Fhistory\u002F2.4.0\u002Fsettings\u002Fversion-matchers.html#Latest%20(Status)%20Matcher\n[component_selection_rules]: https:\u002F\u002Fdocs.gradle.org\u002Fcurrent\u002Fuserguide\u002Fdynamic_versions.html#sec:component_selection_rules\n","ben-manes\u002Fgradle-versions-plugin 是一个 Gradle 插件，用于发现项目依赖项的更新。该插件不仅能够检测项目的库依赖是否有新版本可用，还能检查 Gradle 本身的更新情况，帮助开发者保持项目依赖的最新状态。它支持多种配置方式，包括在 `plugins` 块、`buildscript` 块中直接添加或通过 Gradle 初始化脚本全局启用，提供了高度的灵活性。此外，还支持自定义报告格式和过滤策略，方便用户根据需求定制输出结果。此插件特别适合需要持续维护和升级依赖版本的 Java 或 Kotlin 项目开发场景。",2,"2026-06-11 03:11:43","top_language"]