2010-07-20 1 views
1

Я получаю очень запутанную реакцию от моего файла сборки муравьев, и мне интересно, насколько я недостаточно умен, или на самом деле это может быть ошибка.Расширение Ant Fileset не работает

Я получил следующее свойство установить глобально в моем проекте:

<property name="lib.dir" location="lib"/> 

Тогда я постараюсь добавить некоторые файлы из этого каталога в файл банка через набор файлов (более чем один ресурс):

<fileset dir="${basedir}" includes="lib/*filename*"/> 

Должны быть (и существуют) 3 разные библиотеки, которые сопоставляются таким образом. Однако, если я пытаюсь использовать следующее, он не работает, и никакие файлы не включены:

<fileset dir="${basedir}" includes="${lib.dir}/*filename*"/> 

Обратите внимание, что только различия лежит в использовании глобальной собственности. Теперь простой вопрос: почему первая версия работает как рекламируемая, а вторая - нет?

+0

Я предлагаю запустить Ant с помощью '-verbose' или' -debug' и проверять вывод вокруг вашей задачи. Ant сообщит вам, какие файлы он проверяет для добавления в ваш набор файлов, а также значение 'lib.dir' во время оценки. –

+0

Я попытался запустить ant с -debug, и я нашел эту строку, которая здесь имеет значение: набор файлов: установочный сканер в каталоге [pathToDir] с patternSet {включает в себя: [[pathToDir]/lib/* glpkjni *] исключает: []} Это предполагает, что он должен работать как рекламируемый ... –

ответ

2

Пожалуйста, проверьте фактическое значение «lib.dir» непосредственно перед и, возможно, после задачи, использующей выражение «набор файлов». Просто чтобы убедиться, что он не был изменен случайно после того, как вы установили его по всему миру. Задача <echo/> может помочь.


Возможно, я получил решение. Описание атрибута location:

Устанавливает свойство в абсолютное имя файла данного файла. Если значение этого атрибута является абсолютным путем, оно остается неизменным (с/и \ символами, преобразованными в существующие соглашения с платформами). В противном случае он берется как путь относительно основанного на проекте и расширенного.

Просто используйте атрибут value вместо location. Вот тестовый скрипт, чтобы показать разницу:

Выход на моей системе следующим образом:

Buildfile: D:\Develop\workspace-jabber\scrapbook\build.xml 
target: 
    [echo] D:\Develop\workspace-jabber\scrapbook\lib 
    [echo] lib 
BUILD SUCCESSFUL 
Total time: 307 milliseconds 
+0

Я добавил следующую задачу эха непосредственно перед jar tast: Выход был: [эхо] ОТЛАДКА: Набор файлов включает в себя это: [pathToDir]/Библиотека/* glpkjni * который должен предположить, что по крайней мере оценка имущества должна реально работать. .. –

0

При создании свойства (? Это делается глобальный или в мишени), делает есть каталог lib есть? Если нет, атрибут location не работает - используйте атрибут value вместо этого или лучше определите свойство после создания каталога.

+0

каталог lib уже существует –

1

Я нашел ключ к ответу, но еще не все.

Я запустил обе версии набора файлов с ant -debug, и вот что происходит.

В рабочем, не использующих-собственности версию, я получаю следующий результат:

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [lib/*filename*] excludes: [] } 

, тогда как в РЕКОМЕНДУЕМЫМ-быть-рабочего, но-не вариант я получаю:

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [ [pathToDir]/lib/*filename*] excludes: [] }

Как вы можете видеть, муравей добавить годов [pathToDir] в регулярном выражении, таким образом поисках

[pathToDir]/[pathToDir]/lib/*filename* 

который, очевидно, не существует. Теперь проблема: как мне изменить мою версию, чтобы она работала правильно?

0

Как указано выше, проблема заключалась в том, что $ {lib.dir} тоже содержал весь путь, таким образом, поиск [pathToDir]/[pathToDir]/lib/filename.

Чтобы отменить нежелательный [pathToDir] в свойстве $ {lib.dir}, я теперь использовал задачу. У меня теперь следующее, но имхо не очень приятные глазу решение:

<basename property="lib.dir.rel" file="${lib.dir}"/> 
<fileset dir="${basedir}" includes="${lib.dir.rel}/*filename*"/> 

PS: На второй взгляд, я обнаружил, что Andreas_D также нашел правильную причину и хорошее предложение вчера, что я должен был упускать из виду: -/