Filter name der Datei mit regex
Ich Frage mich, ob es einfacher "Gradle-like" Art und Weise, wie die Liste der Dateien im Verzeichnis, SONDERN NUR die, passenden regulären Ausdruck. Derzeit meine Lösung sieht ungefähr so aus
File fileList = file("${moduleDir}/target")
//pattern for maven artifact
def pattern = ~"^.*-[0-9]\\.[0-9]\\.[0-9](-SNAPSHOT)?\\.jar\$"
fileList.listFiles().each { file ->
if (file.isFile()) {
if (pattern.matcher(file.getName())) {
copy {
from file.getPath()
into targetDir
}
}
}
}
Was ich Suche, ist vollständig unter Umgehung der manuellen pattern-matching. Sind Sie Kenntnis von einer Methode, die mir dabei helfen können, dies zu erreichen? Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht ganz sicher, was du damit meinst, als du dir scheinbar passen wollen, ein benutzerdefiniertes Muster an. In jedem Fall verwende ich ein
Copy
Aufgabe anstelle dercopy
Methode, und würde die Filterung "in" die kopieren-operation. So etwas wie:PS: Sind diese deine eigenen Artefakte? Ich Frage deshalb, weil im Allgemeinen ein Maven-Artefakt verwenden kann so ziemlich jede version number format.
1.0
,0.12.1
,1.0.0-beta-1
,1.0.0.RELEASE
. Das ist natürlich keine erschöpfende Liste. Entsprechen solche Versionen, Ihre Muster werden müssen, weniger streng.Copy.eachFile
:task ... { ... eachFile { println it.file } }
. Bei solch einer Frage die DSL-Referenz ist ein guter Ort, um zu starten (z.B. check-out der Dokumente für dieCopy
Aufgabe).==~
ist ein standard-Groovy operator. groovy.codehaus.org/Regular+Ausdrücke