トップレベルのantプロジェクトとその下にある多くのサブプロジェクトがあります。
./build.xml
./datamodel_src/src/build.xml
./datamodel_src/src/module1/build.xml
./datamodel_src/src/module2/build.xml
./infrastructure_src/src/build.xml
./interfaces_src/src/build.xml
各サブプロジェクトでは、共通の出力ディレクトリ構造を適用したいと思います。プロジェクトには作業領域があり、各サブプロジェクトにはその下に独自の作業領域があります。各サブプロジェクトは、サブプロジェクトの作業領域の下にアーティファクト(lib、docs、classesなど)を作成する必要があります。
したがって、出力は次のようになります
c:/sandbox/mainprojectworkarea/subprojectworkarea/lib
c:/sandbox/mainprojectworkarea/subprojectworkarea/docs
c:/sandbox/mainprojectworkarea/subprojectworkarea/classes
現在、私はこれを次のように行っています。
トップレベルのbuild.xmlは次のようになります
<project name="toplevelproject" default="compile" basedir=".">
<target name="compile">
<ant dir="infrastructure_src/src" />
<ant dir="interfaces_src/src " /> <!--does not work-->
<ant dir="datamodel_src/src inhertAll=false" /> <!--works-->
</target>
</project>
common.xmlは以下のようなものです
<property environment="env" />
<property name="project.sandbox" value="${env.BUILD_HOME}/sandbox" />
<property name="sandbox" value="${project.sandbox}" />
<property name="pwa" value="${sandbox}/pwa" />
<property name="wa" value="${pwa}/${ant.project.name}" />
<property name="build" value="${wa}/build" />
<property name="lib" value="${wa}/lib" />
<property name="docs" value="${wa}/docs" />
<property name="exports" value="${wa}/exports" />
これはすべてのプロジェクトに「含まれています」。たとえば、「datamodel_src / src/build.xml」は次のようになります
<!DOCTYPE project [
<!ENTITY common SYSTEM "../../common.xml">
]>
<project name="dmodel" default="compile" basedir=".">
&common;
<target name="compile">
<echo message="will create lib in ${lib}"/>
<echo message="will create docs in ${docs}"/>
<ant dir="module1" inheritAll="false"/> <!--works fine-->
<ant dir="module2" /> <!--does not work -->
</target>
</project>
これは、 ant呼び出しにinhertiAll=falseを設定すると機能します。
より良い正しい方法はありますか?
ケビンからこの質問への回答を拡大します。importを使用すると、common.xmlは以下のような実際のプロジェクトになります
<project name="toplevelproject" default="compile" basedir=".">
<property name="toplevel" value="settotrue"/>
<target name="compile">
<ant dir="infrastructure_src/src" />
<ant dir="interfaces_src/src" />
<ant dir="datamodel_src/src" />
</target>
</project>
「datamodel_src/src / build.xml」は、次のようになりました。
<project name="dmodel" default="compile" basedir=".">
<import file="../../common.xml" />
<target name="compile">
<echo message="will create classes in ${build}"/>
<echo message="will create lib in ${lib}"/>
<ant dir="module1" inheritAll="false"/> <!--works fine-->
<ant dir="module2" /> <!--does not work -->
</target>
</project>
インポートは、共通のターゲットなどを持つオプションを提供するので、私はそれを使用します。