java - Gradle 复制任务的包含和排除规范

标签 java gradle copy

我有一个包含一组内含物的复制任务

    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/

相关文章:

java - 填充Webview内容时的Android底部白色条纹

multithreading - GradleDaemon守护程序做什么?

gradle - oracle驱动程序版本如何由版本推荐器确定

java - java中将一个文件从一个文件夹复制到另一个文件夹

java - 使用 XML 中的 mixin 生成 Java 源代码

Java Jacc、AST 和递归访问者

java - 使用 try/catch 进行最终变量赋值

Gradle 任务配置与任务执行

mysql - 在远程服务器上部署 MySQL 数据库

HTML 5 : Canvas copying Pixel Data within a Polygon