Я не нашел много способов перебрать путь в скрипте Ant, используя задачи по умолчанию. Если вы работаете на машине с UNIX-подобной оболочкой, вы можете обратиться к ней, чтобы проверить элементы classpath.
При вызове сценариев оболочки вы можете использовать задачу apply
, но я не смог распечатать ее, когда элемент classpath не существовал.
Предположим, у вас есть следующее объявление classpath:
<path id="your.classpath">
<fileset dir="your.libs"/>
<pathelement location="/some/missing/dir"/>
</path>
Это сообщит, если есть какие-либо отсутствующие элементы, но не скажет, какие из них:
<apply executable="test" type="file" ignoremissing="false">
<arg value="-e"/>
<srcfile/>
<path refid="build.classpath"/>
</apply>
Вы можете объединить это с простым сценарием оболочки и получить то, что вы хотите, изменив атрибут executable
- при условии, что вы просто хотите получить большое предупреждающее сообщение, а не сбой сборки:
#!/bin/sh
test -e "$1" || echo "WARNING: Classpath element $1 does not exist!"
Если вы хотите, чтобы сборка завершилась неудачей, вы можете настроить задачу apply
на сбой, если сообщается об ошибке (в данном случае отсутствует файл / каталог), а затем измените скрипт оболочки, чтобы он возвращал ненулевой код завершения после того, как предупреждение напечатано.
В качестве альтернативы можно использовать задачу exec
и просто выполнить небольшой встроенный скрипт:
<pathconvert property="classpath" refid="build.classpath" pathsep=":"/>
<exec executable="sh">
<arg value="-c"/>
<arg value="for f in `echo ${classpath} | tr ':' '\n'`; do test -e $f || echo WARNING: Classpath element $f does not exist!; done"/>
</exec>