2016-08-23 17 views
6

Mam strukturę katalogów takiego:Skopiuj cały katalog w Gradle

file1.txt 
file2.txt 
dir1/ 
    file3.txt 
    file4.txt 

chcę użyć Gradle to copy że cała konstrukcja do innego katalogu. Próbowałem to:

task mytest << { 
    copy { 
     from "file1.txt" 
     from "file2.txt" 
     from "dir1" 

     into "mytest" 
    } 
} 

Ale to powoduje następujące:

mytest/ 
    file1.txt 
    file2.txt 
    file3.txt 
    file4.txt 

See, kopia z dir1 skopiowane pliki wdir1, podczas gdy chcę skopiować dir1sam.

Czy można to zrobić bezpośrednio za pomocą Gradle copy?

Jak dotąd, tylko byli w stanie wymyślić tego rozwiązania:

task mytest << { 
    copy { 
     from "file1.txt" 
     from "file2.txt" 

     into "mytest" 
    } 

    copy { 
     from "dir1" 
     into "mytest/dir1" 
    } 
} 

Na mój prosty przykład nie ma wiele do niego, ale w moim konkretnym przypadku istnieje wiele katalogów Chcę skopiować, i nie chciałbym tak wiele powtarzać.

Odpowiedz

13

Można użyć . jako ścieżkę katalogu i include, aby określić, które pliki i katalogi, które chcesz skopiować:

copy { 
    from '.' 
    into 'mytest' 
    include 'file*.txt' 
    include 'dir1/**' 
} 

Jeśli oba from i into są katalogi, będziesz skończyć z pełną kopią katalogu źródłowego w katalogu docelowym.

+0

Problem z tym, jeśli mam inne pliki w tym folderze, które robię * nie * chcę kopiować. Mogę użyć parametru 'exclude', ale będzie to podatne na błędy, ponieważ inne podkatalogi mogą być dodawane w przyszłości. – Kip

+0

Czy 'include' działa dla Ciebie? Rozszerzyłem odpowiedź, aby pokazać, jak określić pliki/katalogi, które chcesz skopiować. –

+0

działa świetnie dzięki! – Kip

0

Wiem, że jest trochę za późno, ale spróbowałem rozwiązania @Andrew powyżej i skopiowałem wszystko wewnątrz katalogu. "." nie jest obecnie wymagane do reprezentowania bezpośrednich w gradle. Więc zrobiłem rozeznanie i znalazł this

i stworzył poniższy kod (z check up-to-date) w oparciu o nim:

zadanie resourcesCopy() {

doLast { 
    copy { 
     from "src/main/resources" 
     into "./target/dist/WEB-INF/classes" 
    } 
    copy { 
     from "GeoIP2.conf" 
     into "./target/dist/WEB-INF" 
    } 
} 

}

-1

Może również pomocne: użycie numeru fileTree w celu rekurencyjnego skopiowania całego katalogu, np.

task mytest << { 
    copy { 
     from fileTree('.') 
     into "mytest" 
    } 
}