Как использовать FileList в качестве набора файлов в команде UptoDate Ant?
-
14-10-2019 - |
Вопрос
У меня есть цель build.xml
Это создает zip -файл. Чтобы избежать создания ZIP, если файл не был обновлен, я хотел бы заранее проверить обновления. НАСКОЛЬКО МНЕ ИЗВЕСТНО, uptodate
это задача для использования.
Вот соответствующие (упрощенные) разделы скриптов:
<filelist id="zip-files">
<file name="C:/main.exe" />
<file name="D:/other.dll" />
</filelist>
<target name="zip" depends="zip-check" unless="zip-uptodate">
<zip destfile="${zip-file}" >
<filelist refid="zip-files" />
</zip>
</target>
<target name="zip-check">
<uptodate property="zip-uptodate"
targetfile="${zip-file}">
<srcfiles refid="zip-files" />
</uptodate>
</target>
Однако, uptodate
терпит неудачу, потому что srcfiles
должен ссылаться на а fileset
, не filelist
. Анкет Тем не менее, я не могу использовать fileset
Потому что это потребовало бы dir
Атрибут, который я не могу установить, потому что исходные файлы не разделяют базовый каталог.
Конечно, я мог бы просто скопировать все файлы в общий каталог, прежде чем застегнуть их, таким образом, имея возможность использовать fileset
, но мне было интересно, было ли альтернативное решение.
Я использую Ant 1.8.1
Решение
Вместо использования <srcfiles>
, попробуйте использовать <srcresources>
. <srcfiles>
Должен быть набор файлов, но <srcresource>
может быть союз любой коллекции ресурсов, и это должно включать filelist
.
Я не могу пройти тест прямо сейчас, но он должен выглядеть примерно так:
<filelist id="zip-files">
<file name="C:/main.exe" />
<file name="D:/other.dll" />
</filelist>
<target name="zip" depends="zip-check" unless="zip-uptodate">
<zip destfile="${zip-file}" >
<filelist refid="zip-files" />
</zip>
</target>
<target name="zip-check">
<union id="zip-union">
<filelist refid="zip-files"/>
</union>
<uptodate property="zip-uptodate"
targetfile="${zip-file}">
<srcresources refid="zip-union" />
</uptodate>
</target>
Надеюсь, это сработает для вас.