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

时间:2016-09-15 10:01:06

标签: java gradle

我在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 个答案:

答案 0 :(得分:1)

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