Вы можете рассмотреть возможность использования pathconvert
для построения шаблона, с которым fileset includes
может работать.
<pathconvert pathsep="/**/*," refid="source.path" property="my_fileset_pattern">
<filtermapper>
<replacestring from="${basedir}/" to="" />
</filtermapper>
</pathconvert>
Это заполнит ${my_fileset_pattern}
строкой вроде:
1/**/*,2/**/*,3
, если source.path
состоит из трех каталогов 1, 2 и 3 под основанным. Мы используем pathsep
для вставки подстановочных знаков, которые позже будут расширены до полного набора файлов.
Теперь это свойство можно использовать для создания набора файлов из всех файлов. Обратите внимание, что для расширения последней директории в наборе необходим дополнительный трейлинг /**/*
. На этом этапе можно применить исключение.
<fileset dir="." id="my_fileset" includes="${my_fileset_pattern}/**/*">
<exclude name="**/*.java" />
</fileset>
Копия всех файлов, не являющихся Java, становится:
<copy todir="${classes.dir}" preservelastmodified="true">
<fileset refid="my_fileset" />
</copy>
При этом будут скопированы исходные файлы с сохранением структуры исходного каталога в todir
. При необходимости можно установить атрибут flatten
задачи копирования, чтобы все исходные файлы копировались непосредственно в todir
.
Обратите внимание, что пример pathconvert здесь для файловой системы unix, а не для windows. Если требуется что-то переносимое, то для построения шаблона следует использовать свойство file.separator
:
<property name="wildcard" value="${file.separator}**${file.separator}*" />
<pathconvert pathsep="${wildcard}," refid="source.path" property="my_fileset">
...