4

build.xml複数のプロジェクトで同じファイルを再利用しようとしているシナリオがあります。いずれの場合も、最終的なターゲットは、distすべてを JAR 化する です。唯一の違いは、一部のプロジェクトにはsrc/main/java/META-INF/*ディレクトリがあり、他のプロジェクトにはディレクトリがない (src/main/java/*ディレクトリがあるだけ) ことです。

Ant-Contrib<if/>タスクを使用しMETA-INF/て、ビルドでsrc/main/java/META-INF/*利用可能なディレクトリが見つかった場合に、オプションでディレクトリを定義したいと考えています。だから、このようなもの:

<jar jarfile="myapp.jar">
    <if>
        <available file="src/main/java/META-INF" />
        <then>
            <!--
                Copy everything from src/main/java/META-INF into
                the JAR's META-INF directory.

                But how?!?
            -->
            <echo message="I'm trying to copy META-INF!" />
        </then>
    </if>
</jar>

しかし、私はここで2つのことを窒息させています:

  1. このターゲットを実行すると、タスク<if/>内に をネストできないというビルド例外が発生します。<jar/>
  2. クラスパスのルートにディレクトリを作成し、すべての内容をそこにコピーするように<jar/>タスクを構成する方法がわかりません。META-INFsrc/main/java/META-INF

何かご意見は?前もって感謝します。

4

3 に答える 3

4

あなたはそれを必要以上に難しくしています。次のタスクを使用するだけで、META-INF フォルダーが存在する場合は jar に含まれ、存在しない場合は無視されます。

<target name="dist">
    <jar destfile="test.jar">
        <fileset dir="classes"/> <-- or whatever directory you want to put in the jar -->
        <metainf dir="src/main/java/META-INF" erroronmissingdir="false"/>
    </jar>
</target>
于 2013-02-04T13:20:00.627 に答える
1

よりモジュール化されたビルド構成を利用したいようです。2つのターゲットを持つことはどうですか:

<target name="jar">
    <!-- Normal JAR tasks like you currently have (sans the metainf stuff). -->
</target>

<target name="jar-with-metainf">
    <jar destfile="test.jar">
        <fileset dir="classes"/>
        <metainf dir="src/main/java/META-INF"/>
    </jar>
</target>

META-INF/次に、 を含むプロジェクトをビルドする場合は、 を実行するだけjar-with-metainfです。

于 2013-02-11T19:02:09.037 に答える
1

メッセージは正しいです。<if>それ自体がタスクであり、タスク内に他のタスクをネストすることはできません<jar>。ただし、<if>タスクを使用して ID を持つ適切なファイルセットを定義し、refid を使用してこれを JAR に含めることができます。

<if>
    <available file="src/main/java/META-INF" />
    <then>
        <fileset id="src.metainf" dir="src/main/java/META-INF" />
    </then>
    <else>
        <fileset id="src.metainf" dir="." excludes="**/*" />
    </else>
</if>

<jar destfile="myapp.jar">
    <metainf refid="src.metainf" />
</jar>

JB Nizet が指摘しているように、この特定の質問に答えるために実際にはこれは必要ありませんが、他の状況で知っておくと便利なトリックです。<path>ファイルセットよりも要素を定義するときの方が便利だと思います。

于 2013-02-04T13:14:33.373 に答える