2016-05-27 7 views
1

Ich möchte eine Gradle-Aufgabe definieren, die Dateien in vier verschiedene Verzeichnisse kopiert. Es scheint, dass die Kopieraufgabe nur einen einzelnen Zielort erlaubt.Wie kopiert man Dateien mit Gradle an mehr als einen Ort?

// https://docs.gradle.org/current/userguide/working_with_files.html#sec:copying_files 
task copyAssets(type: Copy) { 
    from 'src/docs/asciidoc/assets' 
    //into ['build/asciidoc/html5/assets', 'build/asciidoc/pdf/assets'] 
    into 'build/asciidoc/pdf/assets' 
} 


task gen(dependsOn: ['copyAssets', 'asciidoctor']) << { 
    println "Files are generated." 
} 

Wie kann ich kopieren Sie die Dateien ohne vier verschiedene Aufgaben zu definieren?

Meine aktuelle Lösung ist:

// https://docs.gradle.org/current/userguide/working_with_files.html#sec:copying_files 
task copyAssetsPDF(type: Copy) { 
    from 'src/docs/asciidoc/assets' 
    into 'build/asciidoc/pdf/assets' 
} 
task copyAssetsHTML5(type: Copy) { 
    from 'src/docs/asciidoc/assets' 
    into 'build/asciidoc/html5/assets' 
} 
task copyAssetsDB45(type: Copy) { 
    from 'src/docs/asciidoc/assets' 
    into 'build/asciidoc/docbook45/assets' 
} 
task copyAssetsDB5(type: Copy) { 
    from 'src/docs/asciidoc/assets' 
    into 'build/asciidoc/docbook5/assets' 
} 


task gen(dependsOn: ['copyAssetsPDF', 'copyAssetsHTML5', 'copyAssetsDB45', 'copyAssetsDB5', 'asciidoctor']) << { 
    println "Files are generated." 
} 

Antwort

1

Eine der Lösungen ist eine einzelne Aufgabe mit einer Anzahl von Kopierspezifikationen zu machen wie:

task copyAssets << { 
    copy { 
     from 'src/docs/asciidoc/assets' 
     into 'build/asciidoc/pdf/assets' 
    } 
    copy { 
     from 'src/docs/asciidoc/assets' 
     into 'build/asciidoc/pdf/assets' 
    } 
} 

Oder man kann es in einer Schleife tun:

//an array containing destination paths 
def copyDestinations = ['build/asciidoc/pdf/assets', 'build/asciidoc/html5/assets'] 

//custom task to copy into all the target directories 
task copyAssets << { 
    //iterate over the array with destination paths 
    copyDestinations.each { destination -> 
     //for every destination define new CopySpec 
     copy { 
      from 'src/docs/asciidoc/assets' 
      into destination 
     } 
    } 
}