Script Groovy, grab e configuração Ivy
Publié le 14 August 2019
O assunto do ticket é a configuração de um script de build Gradle.
Quero poder usar um script Groovy sem fazer referência
ao projeto Gradle no qual eu o anexei.
Quero ter a possibilidade de executar este script Groovy fora do Gradle
sem que as anotações ivy de recuperação de dependência externa
não vêm causar problemas de desempenho ou de compilação
do script de build do Gradle.
Para ilustrar a configuração, eu me baseio em dois scripts:
um script de build Gradle e um script Groovy.
O script Groovy contém no início na linha 2,
uma instrução para puxar uma dependência externa
usando o gerenciador de dependências 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()
No arquivo build.gradle, agora vamos ver como harmonizar
os dois gerenciadores de dependências, ivy e Gradle. O acordo entre os dois se faz nas linhas:
26, 30, 37, 38 et 39
Assim posso executar meu script Groovy manualmente,
e a compilação do Gradle não é prejudicada pelo @Grab.
As dependências do script Groovy não devem ser fornecidas no Gradle.
Por outro lado, não consigo executar o script Groovy a partir do 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
}
referência do ticket sobrehttps://stackoverflow.com/a/18174033/837404[stackoverflow]