Чтобы определить задачу Copy мы указываем файлы, которые мы хотим скопировать и в какой каталог. Это определение является экземпляром CopySpec . Он содержит правила, которые определяют, что мы хотим скопировать. Архивные задачи Jar , Zip и Tar также используют экземпляр CopySpec .
Когда мы создаем задачу типа Copy мы получаем объект задачи, который реализует интерфейс CopySpec . Мы можем использовать все методы этого интерфейса, чтобы расширить наш рецепт копирования задач. В следующем файле сборки мы сначала определим website задачи. Мы используем методы CopySpec для настройки задачи. Затем мы определяем задачу deploy типа Sync которая также реализует интерфейс CopySpec .
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
// Create a new task of type Copy.// The website task is of type Copy// and this means it implements the// CopySpec interface. task website(type: Copy) { into "${buildDir}/website" from 'src/webroot' into 'resources', { from 'src/assets' }}// We can use all CopySpec methods// to add new specifications to // the existing specifications.website.into('resources') { from 'src/javascript'}// The copySpec method creates // a CopySpec instance// from the closure.// The copySpec method is part of the// Project object.CopySpec manualSpec = copySpec { from('src/manual') { include '**/*.html' }}// And the with method accepts// the CopySpec we created.website.with(manualSpec)// Print each file path// that is copied.website.eachFile { println it.path}// New task of type Sync.// The Sync task is also implementing// the CopySpec interface.// (Just like archive tasks: Zip, Tar, Jar)task deploy(type: Sync) { destinationDir = file("${buildDir}/production") from website}// Use rename method from CopySpec.deploy.rename { file -> if (file == 'index.html') { 'main.html' } else { file }}// And finally the exclude method.deploy.exclude 'man.html' |
Когда мы запускаем задачу deploy и смотрим на файлы в каталоге build мы видим, как выполняются наши спецификации копирования:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
$ gradle deploy:websiteindex.htmlresources/app.jsresources/site.cssman.html:deployBUILD SUCCESSFULTotal time: 3.643 secs$ tree build/build├── production│ ├── main.html│ └── resources│ ├── app.js│ └── site.css└── website ├── index.html ├── man.html └── resources ├── app.js └── site.css4 directories, 7 files |
| Ссылка: | Совершенство Gradle: Использование CopySpec с заданиями от нашего партнера по JCG Хьюберта Кляйна Иккинка в блоге JDriven . |