1 @file:Suppress("DEPRECATION")
3 import org.gradle.api.Plugin
4 import org.gradle.api.Project
5 import org.gradle.api.Task
6 import org.gradle.api.artifacts.Dependency
7 import javax.xml.parsers.DocumentBuilderFactory
9 class CheckLibVersionsPlugin : Plugin<Project> {
10 override fun apply(project: Project) {
11 project.task("checkLibVersions") {
13 "Find any 3rd party libraries which have released new versions to the central Maven repo since we last upgraded."
15 project.configurations.flatMap { it.allDependencies }
17 .forEach { checkDependency(it) }
22 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"
29 val dbf = DocumentBuilderFactory.newInstance()
30 val db = dbf.newDocumentBuilder()
31 val doc = db.parse(metaDataUrl);
32 val newest = doc.getElementsByTagName("latest").item(0).textContent
33 if (version != newest.toString()) {
34 println("UPGRADE {\"group\": \"$group\", \"name\": \"$name\", \"current\": \"$version\", \"latest\": \"$newest\"}")
36 } catch (e: Throwable) {
37 logger.debug("Unable to download or parse {}: {}", metaDataUrl, e.message)