3

私は Ant を初めて使用します。のように、私はこのタスクを達成するために 2 日前に学習を開始しました。

私がやろうとしているのは、他のいくつかのantスクリプトを呼び出す「マスター」antスクリプトを作成することです。例えば:

Project A
 - contains build.xml, target "makeProjectAjar"
 - output: A.jar

Project B
 - contains build.xml, target "makeProjectBjar"
 - output: B.jar

Project C
 - contains build.xml, target "makeProjectCjar"
 - output: C.jar

Project D
 - contains build.xml, target "finalPackage"
 - Must first build Project A, Project B, Project C
 - Copy A.jar, B.jar, C.jar to Project D
 - Package all of this into D.jar

現在、A、B、および C の個々のビルドがすべて機能しています。つまり、これらのフォルダーのいずれかから 'ant' を実行すると、プロジェクトがビルドされ、jar ファイルが生成されます。この方法で A、B、および C をビルドすると、3 つの jar ファイルが作成されます。次に、それらを D にコピーして、最終的な jar にパッケージ化します。それはうまくいきます。

しかし、私が望むのは、プロジェクト D の build.xml 内から A、B、および C ビルドをトリガーできるようにすることです。私はこれを試しました:

<?xml version="1.0" encoding="UTF-8"?>

<project name="CommonJava" default="makeCommonJavaJar" basedir=".">

    <import file="../Common/build.xml"/>
    <import file="../CommonAndroid/build.xml"/>

    <target name="makeCommonJavaJar" description="Create a jar for the CommonJava project"
        depends="clean">
        <mkdir dir="build" />
        <jar jarfile="./build/commonjava.jar" includes="*.class" />
    </target>

    <target name="clean">
        <delete dir="build" />
    </target>

    <target name="build+package" description="Build all prerequisites and package them">
        <antcall target="makeCommonJar"/>
        <antcall target="makeAndroidJar"/>
    </target>
</project>

makeCommonJar は Common/build.xml (プロジェクト A) のターゲットであり、makeAndroidJar は ../CommonAndroid/build.xml (プロジェクト B) のターゲットです。ただし、を使用する<import>と、呼び出しフォルダーのコンテキストから実行されるようです。プロジェクト B が参照するリソースは、プロジェクト D から実行されているため、利用できないことを意味します。それは理にかなっていますか?

短い質問ですが、Ant を使用して、他のプロジェクトを最初にビルドするために、他のプロジェクトの build.xml ファイルを呼び出すにはどうすればよいですか?

4

1 に答える 1

6

一般的なガイドラインを次に示します (ルールではありません。Ant は非常にリベラルです)。

  • build.xml は通常、特定のプロジェクトで実行されるように設計されているため、他のビルドでは「インポート」されません。
  • このimportタスクは一般的に、あなたが行っているようなビルド ワークフローの一部ではなく、ビルド メカニックの一部を共有するために使用されます。たとえば、jar をビルドするターゲットは、ターゲット ディレクトリなどのいくつかのプロパティによってパラメーター化されます。
  • subantおよびタスクは、ant他のプロジェクトのビルドをトリガーするために優先的に使用されます

プロジェクト D の build.xml は次のようになります。

<project name="CommonJava" default="makeCommonJavaJar" basedir=".">

    <target name="build-deps">
        <ant antfile="../Common/build.xml" target="makeCommonJar"/>
        <ant antfile="../CommonAndroid/build.xml" target="makeAndroidJar"/>
    </target>

    <target name="makeCommonJavaJar" depends="build-deps">
        <mkdir dir="build" />
        <jar jarfile="./build/commonjava.jar" includes="*.class" />
    </target>

</project>

http://ant.apache.org/manual/Tasks/ant.htmlを参照してください。

于 2013-06-11T20:57:06.460 に答える