2010-10-12 2 views
2

Мне интересно, есть ли способ, используя Ant, проверить, доступно ли на диске несколько файлов. В настоящее время у меня есть задача, которая выглядит следующим образом:Как проверить, существует ли набор файлов в сборке Ant?

<target name="copyArtworkToOutputDir" if="artworkContent"> 
    <copy todir="${imageOutputDir}" failonerror="true"> 
    <fileset dir="${sourceDir}" includesfile="${buildDir}/artworklist"/> 
    </copy> 
</target> 

«artworklist» представляет собой список файлов, созданных ранее в сборке. Я могу передать его как набор файлов в задачу «copy», а I должен в конечном итоге создать папку, содержащую все файлы в списке. К сожалению, иногда это не работает, и сборки могут резко потерпеть неудачу на более позднем этапе из-за недостающего ресурса.

Я пробовал установить «failonerror» в true в надежде, что он выкинет исключение, если файл, указанный в списке работ, не существует в исходном местоположении. По какой-то причине это, похоже, не работает, как я ожидаю.

Итак, моя следующая мысль заключалась в том, чтобы использовать что-то вроде «доступной» задачи, чтобы проверить, что содержимое списка работ теперь существует в месте вывода. Похоже, что доступность ограничена отдельными файлами. Так что я тоже немного кончил.

Может кто-нибудь предложить способ, которым я могу проверить, что все файлы, которые я ожидаю быть в ${buildDir} после копии на самом деле там? На данный момент я думаю о пользовательской задаче Ant, но, возможно, есть что-то более очевидное.

ответ

1

Вместо использования fileset, в котором будут отображаться только файлы, которые существуют в файловой системе, и тихо игнорируйте те, которые этого не делают, попробуйте filelist. Списки файлов могут содержать файлы, которые не существуют в файловой системе, поэтому их можно использовать для проверки. Ant будет вызывать ошибку при попытке обработать несуществующий файл в списке файлов.

Небольшой пример:

<filelist 
    id="artworkfiles" 
    dir="${src.dir}" 
    files="foo.xml,bar.xml"/> 

<copy todir="${dest.dir}" failonerror="true" > 
    <filelist refid="artworkfiles" /> 
</copy> 

... 
BUILD FAILED 
build.xml:14: Warning: Could not find resource file ".../src/bar.xml" to copy. 

$ ls src 
foo.xml # No bar.xml in src dir. 
+0

Так что это не способ сделать это с помощью набора файлов? Поскольку добавление всех файлов в качестве атрибута xml менее читаемо. –