【问题标题】:How do I use groovy/Gradle DSL to get a list of directories matching a pattern?如何使用 groovy/Gradle DSL 获取与模式匹配的目录列表?
【发布时间】:2020-03-18 02:00:07
【问题描述】:

Gradle 声纳插件有一个 sonar.junit.reportPaths 属性,该属性需要是包含 JUnit 测试结果文件的目录的逗号分隔列表。

在我们的例子中,目录匹配模式"^.*/build/test-results/(test|(component|integration)Test)/.*$"

我们想使用 fileTree 包含/匹配来生成该列表。

但似乎文件树:

  1. 只返回文件,不返回目录。
  2. 仅限于 ant 样式的文件通配,而不是完整的正则表达式。

在花费了比我们应该花费的时间更长的时间之后,我们最终放弃了并用 Java 编写了它:

def junitResults() {
    Set<String> testDirs = new LinkedHashSet<>()
    for (File file : files(fileTree(dir: rootDir, include: "**/build/test-results/**"))) {
        testDirs.add(file.getAbsolutePath().replaceAll("/build/test-results/(test|(component|integration)Test)/.*", "/build/test-results/\$1"))
    }
    return testDirs.toArray(new String[testDirs.size()]);
}

这有实际工作的优势,但它看起来很特殊。

有人知道如何用看起来很正常的 groovy/Gradle DSL 替换它吗?

【问题讨论】:

    标签: regex gradle groovy


    【解决方案1】:

    也许像 eachDirMatch() 这样的东西

    file('path/build/test-results/.').eachDirMatch(/(test|(component|integration)Test)/) { dir ->
        println dir.getPath()
    }
    

    【讨论】:

      【解决方案2】:

      wp78de,你的回答为我指明了正确的方向(使用文件,而不是文件树):

      def junitResultsDirs() {
      def dirs = []
      rootDir.eachDirRecurse { dir ->
          if (dir.absolutePath.matches("^.*/build/test-results/(test|(component|integration)Test)\$")) {
              dirs << dir
          }
      }
      return dirs;
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-08
        • 2017-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-18
        • 1970-01-01
        相关资源
        最近更新 更多