У меня есть проект верхнего уровня и много подпроектов под ним.
./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, классы и т. Д.) В рабочей области для подпроекта.
Таким образом, на выходе будет что-то вроде
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>
Это работает, когда я устанавливаю значение атрибута attributetill = false для вызовов ant .
Есть ли лучший и правильный способ?
Расширяя ответ Кевина на этот вопрос.
При использовании 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>
Импорт дает возможность иметь общие цели и т. Д., Поэтому я бы пошел с этим.