Расширение набора файлов Ant не работает - PullRequest
1 голос
/ 20 июля 2010

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

В моем проекте установлено следующее свойство:

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

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

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 20 июля 2010

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


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

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

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

<project name="test">

    <property name="test1" location="lib"></property>
    <property name="test2" value="lib"></property>

    <target name="target" description="description">
       <echo>${test1}</echo>
       <echo>${test2}</echo>
    </target>

</project>

Вывод в моей системе выглядит следующим образом:

Buildfile: D:\Develop\workspace-jabber\scrapbook\build.xml
target:
     [echo] D:\Develop\workspace-jabber\scrapbook\lib
     [echo] lib
BUILD SUCCESSFUL
Total time: 307 milliseconds
1 голос
/ 20 июля 2010

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

Я запустил обе версии набора файлов с помощью 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: [] }

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

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

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

0 голосов
/ 21 июля 2010

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

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

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

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

0 голосов
/ 20 июля 2010

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

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