首页 > 解决方案 > Gradle - 添加文件夹和内容以测试资源

问题描述

我想在 Gradle 项目的测试资源中包含一个文件夹及其内容。

假设我有以下项目结构:

projectRoot
| - src
|   | - main
|   |   \ - java
|   \ - test
|       \ - java
\ - vars
    \ - *.groovy files

vars文件夹包含几个*.groovy文件,我希望在构建项目时将它们包含在测试资源中。但是,测试资源必须包含该vars文件夹,而不仅仅是该文件夹中的内容。

如果我将以下块添加到我的buid.gradle文件中,它只会将该文件夹的内容放入测试资源中:

sourceSets {
    test {
        resources {
            srcDir "vars"
        }
    }
}

这使得build/resources/test目录包含文件夹的内容vars但不包含vars文件夹本身:

projectRoot
| - build
|   \ - resources
|       \ - test
|           \ - *.groovy files
| - src
|   | - main
|   |   \ - java
|   \ - test
|       \ - java
\ - vars
    \ - *.groovy files

然而,我真正想要的是:

projectRoot
| - build
|   \ - resources
|       \ - test
|           \ - vars
|               \ - *.groovy files
| - src
|   | - main
|   |   \ - java
|   \ - test
|       \ - java
\ - vars
    \ - *.groovy files

(注意文件夹是如何在vars文件夹中列出的build/resources/test

我该怎么做呢?

注意:我不能更改项目的目录结构(即vars文件夹不能有任何子目录,并且必须是顶级)。

标签: gradle

解决方案


也许这样的事情会起作用:

task copyConfig(type: Copy) {
    from "${project.projectDir}/vars/*.*"
    into "${project.projectDir}/.build/resources/test/vars"
    dependsOn processTestResources
}
copyConfig.mustRunAfter(processTestResources)
testClasses.dependsOn copyConfig
testClasses.mustRunAfter copyConfig

推荐阅读