Как сделать набор файлов Ant INCLUDE приоритетным по сравнению с EXCLUDE? - PullRequest
8 голосов
/ 09 января 2009

Если у меня есть такой набор файлов:

<fileset dir=".">
  <exclude name="classes/*"/>
  <include name="**/zar.class"/>   
</fileset>

Исключение имеет приоритет над включением, и я не заканчиваю никаких классов. [поскольку в этом гипотетическом примере zar.class находится в каталоге dir] Я хотел бы включить файл zar, даже если он находится в каталоге dir.

Некоторое время я бился головой об этом, читая о селекторах, наборах шаблонов, наборах файлов, пытаясь объединить наборы файлов и т. Д., Но не мог заставить его работать.

Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

4 голосов
/ 09 января 2009

Зачем вам нужен элемент исключения?

<fileset dir=".">
  <include name="**/zar.class"/>   
</fileset>

должен дать вам точный набор файлов, которые вам нужны: zar.class, и ни один из других .class файлов в классах /.


Просто поместите это в режиме сообщества вики, потому что я не уверен, если подумать, что это действительно то, что вы после:
вы можете захотеть всего , включая классы /.../ zar.class, кроме классов /....

Мое решение даст только zar.class.

Пожалуйста, оставьте комментарий: если это не хорошее решение, я его удалю.

2 голосов
/ 09 января 2009

Я не уверен, что именно вы хотите, но я думаю, что вы на правильном пути, глядя на pattersets: Как насчет:

<patternset id="a">
  <exclude name="classes/*"/>
</patternset>

<patternset id="b">
  <include name="**/zar.class"/>  
</patternset>

<fileset dir=".">
  <patternset refid="a" />
  <patternset refid="b" />
</fileset>
1 голос
/ 25 января 2012

Какая версия Ant использовалась в исходном вопросе?

С Ant 1.8.2 строфа дает желаемый результат !?

<fileset dir="." id="some.fileset">
    <exclude name="build/classes/*" />
    <include name="**/A.class" />
</fileset>

<target name="test">
    <pathconvert pathsep="${line.separator}" property="listed.fileset" refid="some.fileset"/>
    <echo message="${listed.fileset}" />
</target>

Путь и имя немного отличаются, но этот показывает A.class, а не показывает B.class, который находится рядом с ним.

...