Как я могу заставить задачу javac использовать существующий набор файлов?В моем build.xml я создал несколько наборов файлов, которые будут использоваться в разных местах файла сборки.Вот как они были определены:
<fileset dir = "${src}"
id = "java.source.all">
<include name = "**/*.java" />
</fileset>
<fileset dir = "${src}"
id = "java.source.examples">
<include name = "**/Examples/**/*.java" />
</fileset>
<fileset dir = "${src}"
id = "java.source.tests">
<include name = "**/Tests/*.java" />
</fileset>
<fileset dir = "${src}"
id = "java.source.project">
<include name = "**/*.java" />
<exclude name = "**/Examples/**/*.java" />
<exclude name = "**/Tests/**/*.java" />
</fileset>
Я также использовал macrodef для компиляции java-файлов, поэтому задачу javac не нужно повторять несколько раз.Макрос выглядит так:
<macrodef name="compile">
<attribute name="sourceref"/>
<sequential>
<javac srcdir = "${src}"
destdir = "${build}"
classpathref = "classpath"
includeantruntime = "no"
debug = "${debug}">
<filelist dir="." files="@{sourceref}" /> <-- email is about this
</javac>
</sequential>
Я пытаюсь скомпилировать только те классы, которые необходимы для конкретных целей, а не все цели в исходном дереве.И делать это без необходимости указывать файлы каждый раз.Вот как определяются цели:
<target name = "compile-examples"
depends = "init">
<compile sourceref = "${toString:java.source.examples}" />
</target>
<target name = "compile-project"
depends = "init">
<compile sourceref = "${toString:java.source.project}" />
</target>
<target name = "compile-tests"
depends = "init">
<compile sourceref = "${toString:java.source.tests}" />
</target>
Как видите, каждая цель указывает java-файлы, которые должны быть скомпилированы в виде списка абсолютных имен файлов, разделенных символом двоеточия.Единственная проблема в том, что javac не поддерживает список файлов.Он также не поддерживает набор файлов, путь или набор путей.Я пытался использовать, но он рассматривает список как одно имя файла.Еще я попробовал отправить ссылку напрямую (без использования toString) и использовать, но include, не имеет атрибута ref.
ТАК ВОПРОС: Как вы получаете задачу javac для использования ссылки на набор файлов?это было определено в другой части файла сборки?Я не заинтересован в решениях, которые заставляют меня иметь несколько задач javac.Полностью переписать макрос можно.Изменения в целях также допустимы при условии, что избыточный код между целями поддерживается на минимуме.
ps Другая проблема заключается в том, что набор файлов хочет получить список через запятую.Я только сделал краткий поиск способа преобразования точек с запятой в запятые и не нашел способа сделать это.
pps Извините за вопли, но некоторые люди слишком быстры, чтобы публиковать ответы, не относящиеся к теме.