【问题标题】:Gradle not copying all test resources to output dirGradle 没有将所有测试资源复制到输出目录
【发布时间】:2022-10-05 20:25:12
【问题描述】:

我有一个项目,Gradle 没有将所有测试资源复制到输出目录,我不知道我做错了什么,或者这是否是 Gradle 中的错误。我设法创建了一个简化的测试用例;目录结构如下:

gradle/     # (contains Gradle wrapper files)
src/
    hello/
        Hello.java
tests/
    hello/
        hello.txt
    foo/
        bar.txt
build.gradle
gradlew
gradle.bat

build.gradle 的内容如下:

apply plugin: \'java\'

sourceSets {
    main {
        java.srcDirs = [\'src\']
        resources.srcDirs = [\'src\']
        resources.excludes = [\'**/*.java\']
    }
    test {
        java.srcDirs = [\'tests\']
        resources.srcDirs = [\'tests\']
        resources.excludes = [\'**/*.java\']
    }
}

task staging (type: Copy) {
    from processResources
    from processTestResources { include \'foo/\' } // Offending line

    into \"${buildDir}/staging\"
}

task run (type: JavaExec) {
    dependsOn staging

    // [...]
}

当我运行时:

./gradlew processTestResources    # or just ./gradlew test

只有来自 tests/foo 的资源被复制到输出文件夹。来自 tests/hello 的资源不会被复制。

但是,如果我在暂存任务中注释掉标记为“违规行”的行,那么所有资源都会被复制。

这是预期的行为吗?看起来 Gradle 正在尝试计算需要哪些资源,并且看到 staging 任务只需要测试/foo。但我没有运行staging 任务;我应该能够运行processTestResourcestest 任务并将所有测试资源复制到输出文件夹。

这是 Gradle 中的错误吗?

    标签: java gradle build.gradle


    【解决方案1】:

    问题在于 Groovy 解释“违规行”的方式: 没有括号,Groovy 将 from 之后的所有内容解释为参数。 因此它获取对processTestResources 任务的引用,对其应用配置闭包,然后将结果传递给from

    所以最终结果是您配置了内联processTestResources,而不是配置from

    添加括号改变了含义,清楚地表明使用任务调用from的结果是要配置的内容:

    from(processTestResources) { include 'foo/' } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-22
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 2017-12-01
      • 2010-12-03
      • 2020-05-15
      相关资源
      最近更新 更多