Gradle: lea la última label GIT de xy-release para versionar

Actualmente estoy migrando un proyecto de ant a gradle. Todo está bien, solo existe un problema: actualmente tenemos una tarea basada en ant-contrib personalizada para ejecutar el command git en el repository para leer la última label xy-release para get el número de versión (y la versión del nombre del file jar generado como proyecto- xy.jar). Como puedo ver, necesito un complemento para esto. Tristemente, mirando a través de los complementos disponibles, nada realmente me puede ayudar (existen algunos complementos relacionados con git, pero su objective es otra cosa, como hacer un lanzamiento, labelr el repository, no leer las tags ya hechas). Entonces necesito ayuda para alcanzar mi objective. ¿Tengo que devise todo en Gradle? Sé que puedo importar files de construcción ant existentes, pero realmente no quiero hacerlo.

Alternativamente, simplemente reutilice la tarea Ant existente. No es necesario importar la compilation Ant.

De acuerdo, traté de implementar las mismas cosas viejas en Gradle. (porque estoy huyendo de ant / hiedra, así que no quiero save cosas viejas). Aquí está la salida (podría ser poco convincente, porque soy nuevo en Gradle y Groovy). Funciona.

jar { dependsOn configurations.runtime // get the version doFirst { new ByteArrayOutputStream().withStream { execOS -> def result = exec { executable = 'git' args = [ 'describe', '--tags', '--match', '[0-9]*-release', '--dirty=-dirty' ] standardOutput = execOS } // calculate version information def buildVersion = execOS.toString().trim().replaceAll("-release", "") def buildVersionMajor = buildVersion.replaceAll("^(\\d+).*\$", "\$1") def buildVersionMinor = buildVersion.replaceAll("^\\d+\\.(\\d+).*\$", "\$1") def buildVersionRev = buildVersion.replaceAll("^\\d+\\.\\d+\\.(\\d+).*\$", "\$1") def buildTag = buildVersion.replaceAll("^[^-]*-(.*)\$", "\$1").replaceAll("^(.*)-dirty\$", "\$1") def dirty = buildVersion.endsWith("dirty") println("Version: " + buildVersion) println("Major: " + buildVersionMajor) println("Minor: " + buildVersionMinor) println("Revision: " + buildVersionRev) println("Tag: " + buildTag) println("Dirty: " + dirty) // name the jar file version buildVersion } } // include dependencies into jar def classpath = configurations.runtime.collect { it.directory ? it : zipTree(it) } from (classpath) { exclude 'META-INF/**' } // manifest definition manifest { attributes( 'Main-Class': 'your.fancy.MainClass' ) } } 

Como git tiene el command para esto, git describe , debería ser bastante trivial. Solo llame a git y lea en la salida. Para get solo la última * label de liberación, el command exacto es

 git describe --abbrev=0 --match=*-release 

(No estoy seguro si es regex o glob; si es regex, necesitaría .*-release ). Agregue – --tags si sus tags de lanzamiento no están anotadas.