2015-12-14 11 views
9

Ich möchte einen Bereich von Dateien und ganze Verzeichnisse in ein anderes Verzeichnis in einem einzigen Kopiervorgang kopieren. Ich kann einzelne Dateien und die Inhalte von Verzeichnissen kopieren, aber wie kopiere ich das Verzeichnis selbst?So kopieren Sie ein Verzeichnis mit Kopiervorgang in Gradle

Das ist meine Aufgabe:

task myTask(type: Copy) { 
    from 'path/to/file' 
    from 'path/to/dir' 
    into 'path/to/target' 
} 

die kopiert die Datei in Ordnung, aber nur die Dateien im Verzeichnis. Ich möchte mit dem Inhalt des Verzeichnisses in path/to/target/dir enden (nicht in path/to/target).

fand ich eine Arbeit um unter Verwendung von:

task myTask(type: Copy) { 
    from 'path/to/file' 
    from 'path/to' 
    into 'path/to/target' 
    include 'dir' 
} 

Aber das ist zu Namenskollisionen anfällig. Ich habe tatsächlich viele Dateien und Verzeichnisse zu kopieren, und ich möchte es zu einer Aufgabe machen.

Antwort

5

Es ist ein Buch, das zum Download auf der Gradle Website here verfügbar ist oder Klicken Sie auf "Get Free Ebook" here: "Gradle über die Grundlagen", die eine direkte Antwort auf Ihre Frage auf Seite 3 bietet (Transformation Directory Struktur).

zu Ihrem Beispiel angewandt, um die Lösung wäre wie folgt:

task myTask(type: Copy) { 
     from 'path/to/file' 
     from 'path/to/dir' { 
      into 'dir' 
     } 
     into 'path/to/target' 
    } 

Die Einschränkung ist, dass es nicht dynamisch den Namen des zweiten Ebene Zielverzeichnisses (dir) von der Quelle zu bestimmen, aber es ist ein sauberer Ansatz.

+0

wow, es ist so anders als meine Antwort – AdamSkywalker

+0

@ Adam und es ist eine bessere Lösung als bei Ihnen, weil dieser ist mehr "OO" - die Anpassung des Verhaltens ist in dem Befehl enthalten, während deine eher einem Callback oder einem anderen Befehl ähnelt – Bohemian

+0

@Bohemian ich sehe die gleichen 4 Zeilen in einer anderen Reihenfolge :) – AdamSkywalker

5

Die einzige Lösung, die ich für Ihr Problem kennen:

task myTask(type: Copy) { 
    into 'path/to/target' 
    from 'path/to/file' 

    into ('dir') { 
     from 'path/to/dir'   
    } 
} 

Beachten Sie, dass into: ('dir') Bauarbeiten relativ zu path/to/target/ Lage

+0

, dass eine Verbesserung ist, aber ich es nicht glauben kann nicht eine Möglichkeit, dies/einfach richtig zu tun ist, – Bohemian

Verwandte Themen