因此,情況如下:我有一個父級構建文件,它定義了一個編譯任務,我希望子構建文件可以選擇性地向類路徑添加更多的JAR(可能在任何地方)該編譯任務使用。在Ant中創建一個空的佔位符文件集
並非所有的子構建文件都具有這些附加的依賴關係,所以我不想強制它們定義附加的依賴關係文件集。他們應該能夠包含父項,並且編譯任務應該可以工作。 (顯然還有其他必需的屬性可以配置源目錄等等,但是它們不會涉及到這一點,而且,實際的包含/繼承問題稍微複雜一些,但希望無論什麼是正確的事情針對簡單的情況將在複雜的情況下工作太)
我有一些作品:在父生成文件的編譯任務指的是附加的依賴文件集,無論:
<target name="compile" depends="init-additional-dependencies">
<fileset id="global.dependency.fileset" dir="${global.library.directory}">
<include name="**/*.jar"/>
</fileset>
<javac ...>
<classpath>
<!-- should be the same for all buildfiles -->
<fileset refid="global.dependency.fileset"/>
<!-- should be populated by child buildfiles -->
<fileset refid="additional.dependency.fileset"/>
</classpath>
</javac>
</target>
...和父構建文件也有一個創建此文件集的任務,爲空,以便javac不會炸燬。不過,我創建空的文件集的方式是遲鈍的:
<target name="init-additional-dependencies">
<!-- override me! -->
<fileset id="additional.dependency.fileset" dir=".">
<include name="placeholder.does.not.exist.so.fileset.is.empty"/>
</fileset>
</target>
這工作,但似乎啞巴,很難相信沒有一個更好的辦法。什麼是更好的方法?
很有趣的問題+1 。麻煩是你的dirset使用「。」它始終存在。如果你在保留附加依賴jar的地方命名約定(比如./deps/),那麼你可以用'erroronmissingdir = false'創建dirset。 – Jayan