Gradle复制资源,processResources

Gradle copy resources, processResources

我正在尝试将 2 个文件夹从我的项目文件夹复制到 jar 中。 当我使用以下设置时 Gradle 复制文件夹内的文件,而不是文件夹本身:

processResources {
    from 'public'
    from 'data'
}

我需要的是将文件夹 "projectDir/data" 复制到 "my.jar/data"。

如果 from 中的指定路径是文件夹,Gradle 中的 copy 规范会复制文件夹的内容。

一种解决方案是使用 into directive.

jar 中指定目标文件夹
processResources {
    from 'data'
    from 'publicFolder'
}

task data(type: Copy) {
    from 'data' into 'data'
}

task publicFolder(type: Copy) {
    from 'public' into 'public'
}

这会将内容或原始文件夹放入jar 中同名的文件夹中。但如您所见,您需要在 into 闭包中重复文件夹名称。

另一种解决方法是为这些资源文件夹设置一个父文件夹,并在 copy 规范中使用该父文件夹。

这是构建资源文件夹的一种方法:

<project-folder>
|
--> res
    |
    --> public
    --> data

然后在 processResourcescopy 规范中,您可以执行以下操作:

processResources {
    from 'res'   
}

这将根据需要在最终的 jar 文件中创建文件夹 publicdata

有一个 'from' 方法使用 CopySpec 进行闭包。

我建议使用它,而不是分解成单独的任务或重组布局。

processResources {
    from('data') {into 'data'}
    from('publicFolder') {into 'publicFolder'}
}