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