Wtyczka Sonaru Gradle ma właściwość sonar.junit.reportPaths
, która musi być lista oddzielna przecinka lista katalogów zawierających pliki wyników testów Junit.
W naszym przypadku katalogi pasują do wzoru "^.*/build/test-results/(test|(component|integration)Test)/.*$"
.
Chcieliśmy wygenerować tę listę za pomocą Fitereree, obejmuje / dopasowywanie.
Ale wydaje się, że fileTree:
- Zwraca tylko pliki, a nie katalogów.
- Jest ograniczony do globulacji plików w stylu mrówki, a nie pełne wyrażenia regularne.
Po wymachianiu na drodze dłużej niż powinniśmy spędzić na niej, w końcu zrezygnowaliśmy i napisaliśmy go w Javie:
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()]);
}
To ma tę zaletę, że działa, ale wygląda na idiosynkratyczne.
Czy ktoś wie, jak zastąpić, że z normalnym wyglądem Groovy / Gradle DSL?
2 odpowiedzi
Może coś z eachDirMatch()
w ten sposób
file('path/build/test-results/.').eachDirMatch(/(test|(component|integration)Test)/) { dir ->
println dir.getPath()
}
WP78DE, Twoja odpowiedź wskazała mnie we właściwym kierunku (użyj pliku, a nie fileTree):
def junitResultsDirs() {
def dirs = []
rootDir.eachDirRecurse { dir ->
if (dir.absolutePath.matches("^.*/build/test-results/(test|(component|integration)Test)\$")) {
dirs << dir
}
}
return dirs;
}
Podobne pytania
Nowe pytania
regex
Wyrażenia regularne zapewniają deklaratywny język do dopasowywania wzorców w łańcuchach. Są powszechnie używane do sprawdzania poprawności ciągów, analizowania i transformacji. Ponieważ wyrażenia regularne nie są w pełni ustandaryzowane, wszystkie pytania z tym znacznikiem powinny również zawierać znacznik określający odpowiedni język programowania lub narzędzie.