1 @file:Suppress("DEPRECATION")
3 import groovy.util.XmlSlurper
4 import groovy.util.slurpersupport.GPathResult
5 import org.codehaus.groovy.runtime.ResourceGroovyMethods
6 import org.gradle.api.Plugin
7 import org.gradle.api.Project
8 import org.gradle.api.Task
9 import org.gradle.api.artifacts.Dependency
11 class CheckLibVersionsPlugin : Plugin<Project> {
12 override fun apply(project: Project) {
13 project.task("checkLibVersions") {
15 "Find any 3rd party libraries which have released new versions to the central Maven repo since we last upgraded."
17 project.configurations.flatMap { it.allDependencies }
19 .forEach { checkDependency(it) }
24 private fun Task.checkDependency(dependency: Dependency) {
25 val version = dependency.version
26 val group = dependency.group
27 val path = group?.replace(".", "/") ?: ""
28 val name = dependency.name
29 val metaDataUrl = "https://repo1.maven.org/maven2/$path/$name/maven-metadata.xml"
31 val url = ResourceGroovyMethods.toURL(metaDataUrl)
32 val metaDataText = ResourceGroovyMethods.getText(url)
33 val metadata = XmlSlurper().parseText(metaDataText)
34 val newest = (metadata.getProperty("versioning") as GPathResult).getProperty("latest")
35 if (version != newest.toString()) {
36 println("UPGRADE {\"group\": \"$group\", \"name\": \"$name\", \"current\": \"$version\", \"latest\": \"$newest\"}")
38 } catch (e: Throwable) {
39 logger.debug("Unable to download or parse {}: {}", metaDataUrl, e.message)