Итак, вот такая ситуация: у меня есть родительский файл сборки, который определяет задачу компиляции, и я хочу, чтобы дочерние файлы сборки могли дополнительно добавлять JAR-файлы (которые могут быть где угодно) в путь к классам, используемый этой задачей компиляции.
Не все дочерние файлы сборки будут иметь эти дополнительные зависимости, поэтому я не хочу заставлять их определять дополнительный набор файлов зависимостей.Они должны просто иметь возможность включать родительский элемент, и задача компиляции должна просто работать.
(Очевидно, есть другие обязательные свойства, которые настраивают исходный каталог и т. Д., Но они не входят в это. Такжепроблема собственно включения / наследования немного сложнее, но, надеюсь, что в простом случае все, что нужно для простого случая, будет работать и в сложном случае.)
У меня есть кое-что, что работает: Задача компиляции вродительский файл сборки ссылается на дополнительный набор файлов зависимостей независимо от:
<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>
Это работает, но кажется глупым, и трудно поверить, что нет лучшего подхода.Что это за лучший подход?