有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

渐变复制任务的include和Excludes的java规范

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

    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"
    }
}

它工作得很好,但是最后一次复制任务的“from”树中包含了3个文件夹,它们不包含任何与包含内容相关的文件,因此在执行任务之后,它们是空的。 我想把他们完全排除在任务之外,但我很难做到这一点。目前,我只是在最后的“doLast”块中删除它们,这似乎有点愚蠢。 我试过了

exclude: "${test_src_dir}/com/XXXX/ppm/gantt",..**similar statements for other files**

exclude: "${test_src_dir}/**/gantt"

虽然我觉得“**”的用法在这个上下文中是不正确的。 我希望大家能提供意见


共 (1) 个答案

  1. # 1 楼答案

    您可以尝试includeEmptyDirs = false,尽管我不能完全确定它是否适用于非空目录,这些目录只有在接受includes/excludes之后才会变为空

    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方法都将自动创建目标目录