我有一个包含一组内含物的复制任务
task test_init(dependsOn: generate_scripts){
doFirst{
mkdir (project.test_dir)
mkdir (project.test_data_dir)
mkdir (project.test_reports_dir)
mkdir (project.test_logs_dir)
mkdir (project.test_jasper_dir)
mkdir (project.test_chart_dir)
}
doLast{
copy
{
from"${test_script_hsqldb_nd}"
into"${test_dir}"
}
copy
{
from"${test_script_create_constraints}"
into"${test_dir}"
}
copy
{
from"${test_script_drop_constraints}"
into"${test_dir}"
}
copy
{
from fileTree(dir: "${test_src_dir}",
include:
[
'**/*.xml',
'**/*.dtd',
'**/*.csv',
'**/*.mpp',
'**/*.dic',
'**/*.png',
'**/*.properties'
])
into"${build_classes_dir}"
}
}
//////THIS IS MY UGLY WORKAROUND////////////////////
doLast{
delete "${build_classes_dir}/com/XXXX/ppm/gantt"
delete "${build_classes_dir}/com/XXXX/ppm/util"
delete "${build_classes_dir}/com/XXXX/ppm/action/pageinformation"
}
}
它工作得很好,但有 3 个文件夹包含在最后一个复制任务的“来源”树中,不包含任何与包含项相关的文件,因此在任务之后它们是空的。 我想让他们完全排除在任务之外,但我很难做到这一点。目前我只是在最后的“doLast” block 中删除它们,这似乎有点愚蠢。 我试过了
exclude: "${test_src_dir}/com/XXXX/ppm/gantt",..**similar statements for other files**
和
exclude: "${test_src_dir}/**/gantt"
虽然我觉得“**”在这种情况下的用法不正确。 我将不胜感激任何人的意见。
最佳答案
您可以尝试 includeEmptyDirs = false
,尽管我不完全确定它是否适用于仅在执行包含/排除后才变为空的非空目录。
PS:通常使用 Copy
任务会更好(也展示了如何大大简化语法):
task test_init(type: Copy, dependsOn: generate_scripts) {
from test_script_hsqldb_nd
from test_script_create_constraints
from test_script_drop_constraints
into test_dir
}
// assuming build_classes_dir is not a subdirectory of test_dir, we need a
// second Copy task (every Copy task has a single top-level destination dir)
task test_init_2(type: Copy, dependsOn: generate_scripts) {
from test_src_dir
into build_classes_dir
include '**/*.xml'
include '**/*.dtd'
include '**/*.csv'
include '**/*.mpp'
include '**/*.dic'
include '**/*.png'
include '**/*.properties'
includeEmptyDirs = false
}
Copy
任务和copy
方法都会自动创建目标目录。
关于java - Gradle 复制任务的包含和排除规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21564912/