簡單的解決方法就是指定多個文件集,在相同的方式, javac任務支持多個「SRC」屬性:這當然
<target name="build" depends="init" description="Create the package">
<javac destdir="${classes.dir}" includeantruntime="false">
<src path="src/main1/java"/>
<src path="src/main2/java"/>
</javac>
<copy todir="${classes.dir}" includeemptydirs="false">
<fileset dir="src/main1" excludes="**/*.java"/>
<fileset dir="src/main2" excludes="**/*.java"/>
<flattenmapper/>
</copy>
</target>
假定源代碼位置的數量是固定的,這是不不合理的期望。
如果你想推動這個使用必須求助於您的構建中嵌入腳本來處理這個列表中的列表屬性(我不能贊同螞蟻的contrib):
<project name="demo" default="build">
<property name="src.dirs" value="src/main1,src/main2"/>
<property name="build.dir" location="build"/>
<property name="classes.dir" location="${build.dir}/classes"/>
<target name="bootstrap">
<mkdir dir="${user.home}/.ant/lib"/>
<get dest="${user.home}/.ant/lib/groovy-all.jar" src="http://search.maven.org/remotecontent?filepath=org/codehaus/groovy/groovy-all/2.1.6/groovy-all-2.1.6.jar"/>
</target>
<target name="init">
<mkdir dir="${classes.dir}"/>
</target>
<target name="build" depends="init" description="Create the package">
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/>
<groovy>
def srcDirs = properties["src.dirs"].split(",")
ant.javac(destdir:properties["classes.dir"], includeantruntime:false) {
srcDirs.each {
src(path:"${it}/java")
}
}
ant.copy(todir:properties["classes.dir"], includeemptydirs:false) {
srcDirs.each {
fileset(dir:it, excludes:"**/*.java")
}
flattenmapper()
}
</groovy>
</target>
<target name="clean" description="Cleanup build dirs">
<delete dir="${build.dir}"/>
</target>
</project>
注:
- 比較「構建」目標。您會注意到groovy解決方案以相同的方式調用ANT。這就是爲什麼我非常喜歡groovy與ANT的整合。
- 示例還包含一個「bootstrap」目標,用於從Maven Central下載Groovy jar依賴項。你也可以用ivy來管理你的構建的依賴關係。
這就是我最終做的,雖然它不允許創建可以通過引用重用的「複合」資源。 –
另外值得一提的是如何在https://ant.apache.org/manual/Tasks/script.html末尾使用''來創建目錄列表的路徑 –