【发布时间】:2020-03-18 02:00:07
【问题描述】:
Gradle 声纳插件有一个 sonar.junit.reportPaths 属性,该属性需要是包含 JUnit 测试结果文件的目录的逗号分隔列表。
在我们的例子中,目录匹配模式"^.*/build/test-results/(test|(component|integration)Test)/.*$"。
我们想使用 fileTree 包含/匹配来生成该列表。
但似乎文件树:
- 只返回文件,不返回目录。
- 仅限于 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 替换它吗?
【问题讨论】: