1

すべての JAR をあるディレクトリから別のディレクトリにコピーしようとしています。このプロセス中に、ファイル名の末尾にあるバージョン番号を削除したいと考えています。(例: my-jar-1.2.3.jar から my-jar.jar へ)

マッパーに頭を悩ませようとしましたが、それを機能させるための正規表現が見つかりません。私はこれを試しました:

<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

あのラストはトラブルメーカー…

これを 2 つのコピーで実行する価値があるかもしれません。1 つはバージョン番号が見つかった場合の処理​​、もう 1 つはバージョン番号のない jar の処理です。

于 2013-06-07T19:03:30.273 に答える