Script Groovy, configuración grab e ivy
Publié le 14 August 2019
El tema del ticket es la configuración de un script de compilación Gradle.
Quiero poder utilizar un script Groovy sin hacer referencia
al proyecto Gradle al que lo adjunté
Quiero tener la posibilidad de ejecutar este script Groovy fuera de Gradle.
sin que las anotaciones ivy de recuperación de dependencia externa
no causan problemas de rendimiento o de compilación
del script de build de Gradle.
Para ilustrar la configuración me baso en dos scripts:
un script de build Gradle y un script Groovy.
El script Groovy contiene al inicio en la línea 2,
una instrucción para tirar una dependencia externa
con el gestor de dependencias ivy.
#!/usr/bin/env groovy
@Grab("commons-io:commons-io:2.6")
import org.apache.commons.io.FileUtils
static String getSeparator() {
System.getProperty("file.separator")
}
String from = "${System.getProperty("user.home")}${separator}.config${separator}transmission${separator}torrents"
String to = "${System.getProperty("user.home")}${separator}Documents${separator}torrents_completed"
File fromDlDir = new File("${System.getProperty("user.home")}${separator}Téléchargements")
File fromDir = new File(from)
File toDir = new File(to)
Collection<File> torrentFiles = FileUtils.listFiles(
fromDir,
["torrent"] as String[],
false)
torrentFiles.addAll(FileUtils.listFiles(
fromDlDir,
["torrent", "torrent.added"] as String[],
false))
torrentFiles.empty ?: torrentFiles.each { it ->
FileUtils.copyFileToDirectory(it, toDir)
}
println torrentFiles.size()
En el archivo build.gradle, ahora veamos cómo armonizar
los dos gestores de dependencias, ivy y Gradle. El acuerdo entre los dos se hace en las líneas :
26, 30, 37, 38 et 39
Así puedo lanzar mi script Groovy manualmente,
y la compilación de Gradle no se ve obstaculizada por el @Grab.
Las dependencias del script Groovy no se deben proporcionar en Gradle.
Por otro lado, no puedo lanzar el script Groovy desde Gradle.
plugins {
id "java"
id "groovy"
}
repositories {
mavenCentral()
jcenter()
}
sourceSets {
main {
java { srcDirs = [] }
groovy { srcDirs =["src/main/java", "src/main/groovy"] }
resources {
srcDirs =["src/main/resources"]
}
}
test {
java { srcDirs = [] }
groovy { srcDirs =["src/test/java", "src/test/groovy"] }
}
}
configurations {
ivy
}
dependencies {
ivy "org.apache.ivy:ivy:$ivy_version"
implementation "org.codehaus.groovy:groovy-all:$groovy_version"
}
tasks.withType(GroovyCompile) {
groovyClasspath += configurations.ivy
}
referencia del ticket enhttps://stackoverflow.com/a/18174033/837404[stackoverflow]