试试这个...
<project>
<mkdir dir="lib"/>
<copy todir="lib"
verbose="true">
<fileset dir="jars/">
<include name="*.jar"/>
</fileset>
<mapper type="regexp"
from="^(.+?)-[0-9].*$"
to="\1.jar"/>
</copy>
</project>
在 regex
映射器中,from
参数必须匹配整个名称。我使用+?
非贪婪模式匹配器。这与模式相匹配.
,意味着任何字符,但不贪婪。通常,这将匹配整行。但是,我正在捕捉到第一次找到一个破折号后跟一个数字的时间。
如果 jar 没有版本号,或者它以非数字值开头,则会出现问题。我可以成功地做到这些:
foo-2.3.2.jar
foo-2r1.jar
但不是这些:
foo-alpha.jar
foo.jar
所以,我稍微调整了模式:
<project>
<mkdir dir="lib"/>
<copy todir="lib"
verbose="true">
<fileset dir="jars/">
<include name="*.jar"/>
</fileset>
<mapper type="regexp"
from="^(.+?)-[0-9]*.*\.jar$"
to="\1.jar"/>
</copy>
</project>
$ ant
[mkdir] Created dir: lib
[copy] Copying 5 files to lib
[copy] Copying jars/bar-3.4.5.jar to lib/bar.jar
[copy] Copying biff-86.4.2.jar to lib/biff.jar
[copy] Copying jars/boff-2.31.2.jar to lib/boff.jar
[copy] Copying jars/foo-1.2.3.jar tolib/foo.jar
[copy] Copying jars/foo-bar-3.3.2.3.jar to lib/foo.jar
最后一个是麻烦制造者...
可能值得在两份副本中执行此操作:一份要注意是否找到了版本号,另一份要注意没有版本号的 jar。