如何将Maven文件名解析为 Artifact 和版本?

文件名看起来像这样:

test-file-12.2.2-SNAPSHOT.jar
test-lookup-1.0.16.jar

我需要得到
test-file
12.2.2-SNAPSHOT
test-lookup
1.0.16

因此,artifactId是破折号和数字的第一个实例之前的文本,版本是直到.jar的数字的第一个实例之后的文本。

我可能可以通过split以及几个循环和检查来做到这一点,但感觉应该有一个更简单的方法。

编辑:

实际上,正则表达式并不像我想的那么复杂!
   new File("test").eachFile() { file ->
    String fileName = file.name[0..file.name.lastIndexOf('.') - 1]
    //Split at the first instance of a dash and a number
    def split = fileName.split("-[\\d]")
    String artifactId = split[0]
    String version = fileName.substring(artifactId.length() + 1, fileName.length())

    println(artifactId)
    println(version)
  }

编辑2:嗯。它在诸如此类的示例上失败:
http://mvnrepository.com/artifact/org.xhtmlrenderer/core-renderer/R8
core-renderer-R8.jar

最佳答案

基本上就是这个^(.+?)-(\d.*?)\.jar$如果多于一行,则在多行模式下使用。

 ^
 ( .+? )
 -
 ( \d .*? )
 \. jar
 $

输出:
 **  Grp 0 -  ( pos 0 , len 29 )
test-file-12.2.2-SNAPSHOT.jar
 **  Grp 1 -  ( pos 0 , len 9 )
test-file
 **  Grp 2 -  ( pos 10 , len 15 )
12.2.2-SNAPSHOT

--------------------------

 **  Grp 0 -  ( pos 31 , len 22 )
test-lookup-1.0.16.jar
 **  Grp 1 -  ( pos 31 , len 11 )
test-lookup
 **  Grp 2 -  ( pos 43 , len 6 )
1.0.16

关于regex - 解析Maven文件名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26723427/

10-13 09:13