代码之家  ›  专栏  ›  技术社区  ›  avalon

Java Gradle在一个任务中复制2个不同的文件夹

  •  2
  • avalon  · 技术社区  · 8 年前

    我在intelliJidea的java项目中使用gradle-2.8。我需要将2个不同的资源复制到2个不同文件夹中。

    task copySubprojectLibs (type: Copy, dependsOn: subprojects.jar) {
        from (subprojects.jar) {
            into 'build/libs/lib'
        }
    
        from ('src/main/resources') {
            into 'build/libs/nosr/conf'
        }
    }
    

    然后尝试:

    task copySubprojectLibs (type: Copy, dependsOn: subprojects.jar) {
        from (subprojects.jar) into 'build/libs/lib'
        from ('src/main/resources') into 'build/libs/nosr/conf'
    }
    

    然后尝试删除dependsOn、类型参数、重新排序行等,但我总是得到

    > No value has been specified for property 'destinationDir'.
    

    要将2个资源复制到2个不同的文件夹,我需要做什么?在一个任务或两个任务中,这种东西在两个任务里也不起作用。但一行一任务的简单复制是可行的。如何在一个任务中做到这一点?这是一个简单的问题,为什么分级那么棘手?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Michael Easter    8 年前

    这个 Copy task 配置了 CopySpec ,它只允许一个目标目录。

    请考虑使用此方法:

    task copySubprojectLibsA (type: Copy, dependsOn: subprojects.jar) {
        from subprojects.jar 
        into 'build/libs/lib'
    }
    
    task copySubprojectLibsB (type: Copy, dependsOn: subprojects.jar) {
        from 'src/main/resources'
        into 'build/libs/nosr/conf'
    }
    
    task copySubprojectLibs(dependsOn: ["copySubprojectLibsA","copySubprojectLibsB"])
    

    另一种方法是使用Gradle中包含的Ant Builder:

    task copySubprojectLibs (dependsOn: subprojects.jar) << {
        files(subprojects.jar).each { 
            ant.copy(file: it.absolutePath, todir: "build/libs/lib")
        }
        ant.copy(todir: "build/libs/nosr/conf") {
            fileset(dir: "src/main/resources")
        }
    }