Муравей: два вопроса о дирсетах - PullRequest
6 голосов
/ 15 марта 2012

У меня есть два вопроса о типе dirset в Apache Ant.

  • Действительно ли dirset - это набор, без гарантированного порядка или он сохраняет порядок ввода? Я хочу использовать ant: contrib для итерации по ряду каталогов и порядку, поэтому, если dirset Ant не сохраняет порядок вставки, какие у меня есть альтернативы?
  • Как я могу проверить, включен ли определенный каталог в набор?

Ответы [ 4 ]

3 голосов
/ 15 марта 2012

[Изменить]

Если вы посмотрите на источник dirset Похоже, что он использует java File.list(), чья документация утверждает, что не существует гарантированного порядка. Так что нет, вы абсолютно не можете рассчитывать на это. Однако, прежде чем ответить на него, звоните Arrays.sort(files); См. Строку 1572.


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

Что касается тестирования, я полагаю, вы хотите, выполните действие, если этот файл существует или что-то подобное, используя ant contrib,

<for param="directory">
<dirset dir="dirIneedtoexist">
</dirset>
<sequential>
     <!-- Stuff to do if it exists. -->          
</sequential>
</for>

Если в наборе ничего нет, то ничего не будет делать.

1 голос
/ 04 октября 2012

Согласно этой странице

dirset Добавляет каталог, заданный в неявном пути сборки.Обратите внимание, что каталоги будут добавлены в путь сборки в произвольном порядке, поэтому, если порядок значительный, вместо этого следует использовать список файлов!

Вот ссылка на то, как использовать FileList

1 голос
/ 15 марта 2012

В документации Ant не так много информации о dirset .

Если вы используете patternset, гарантия заказа отсутствует.

Если вы используете include, перечисляя отдельные каталоги, а не шаблоны, dirset должен сохранить порядок.Я бы проверил это, хотя, чтобы быть уверенным.

Отредактировано, чтобы добавить: В случае, если я ошибаюсь, вы можете написать свое собственное Пользовательское задание Ant , чтобы сохранить порядоквключить каталоги.

0 голосов
/ 15 марта 2012

Нет, это не сохраняет порядок.

Содержимое dirset основано на том, что его родительский класс предоставляет через DirectoryScanner.Этот сканер обходит файловую систему и не делает этого в каком-либо конкретном порядке.

Он также использует File.list, который является источником недетерминированности порядка:

Нет гарантии, что строки имен в результирующем массиве будут отображаться в каком-либо определенном порядке;в частности, они не гарантированы в алфавитном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...