1

我正在尝试将所有 JAR 从一个目录复制到另一个目录。在此过程中,我想删除文件名末尾的版本号。(例如 my-jar-1.2.3.jar 到 my-jar.jar)

我试图把我的头绕在 mapper 上,但我找不到一个正则表达式来让它工作。我试过这个:

<copy todir="lib" flatten="true">
    <mapper type="regexp" from="(.*)-[^.]*(\.jar)" to="\1\2" />
        <fileset dir="my.files.dir">
            <include name="**/*.jar" />
            <type type="file" />
        </fileset>
</copy>
4

4 回答 4

2

这是以下答案的更好版本:

<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>

处理“最后一个是麻烦制造者”

于 2016-02-08T11:25:54.543 回答
1

这应该可以正常工作:

<copy todir="lib" flatten="true">
    <mapper type="regexp" from="(.*)-[^-]*(\.jar)" to="\1\2" />
    <fileset dir="my.files.dir">
        <include name="**/*.jar" />
        <type type="file" />
    </fileset>
</copy>
于 2013-06-07T18:57:52.297 回答
0

maven-ant-task-lib 中有一个映射器,它就是这样做的。

于 2013-06-07T15:49:24.250 回答
0

试试这个...

<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。

于 2013-06-07T19:03:30.273 回答