Subjek tiket adalah konfigurasi skrip build Gradle.
Saya ingin dapat menggunakan skrip Groovy tanpa referensi
ke proyek Gradle tempat saya melampirkan.
Saya ingin dapat menjalankan skrip Groovy ini di luar Gradle
tanpa anotasi ivy untuk pengambilan dependensi eksternal
tidak menimbulkan masalah performa atau kompilasi
dari skrip build Gradle.
Untuk mengilustrasikan konfigurasi saya mengandalkan dua skrip:
skrip build Gradle dan skrip Groovy.
Skrip Groovy berisi di awal pada baris 2,
sebuah instruksi untuk menarik ketergantungan eksternal
dengan menggunakan pengelola dependensi 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()

Dalam file build.gradle, sekarang mari kita lihat bagaimana mengharmonkan
kedua manajer dependensi, ivy dan Gradle. Perjanjian antara keduanya dilakukan pada baris:
26, 30, 37, 38 et 39
Jadi saya dapat menjalankan skrip Groovy saya secara manual,
dan kompilasi Gradle tidak terganggu oleh @Grab.
Ketergantungan skrip Groovy tidak perlu disediakan dalam Gradle.
Sebaliknya saya tidak dapat menjalankan skrip Groovy dari 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
}

referensi tiket padahttps://stackoverflow.com/a/18174033/837404[stackoverflow]

Artikel terkait