Сборка Ant и пустые каталоги

По какой-то причине, когда я использую scp для перемещения файлов с моего текущего компьютера на сервер с помощью ant, он всегда игнорирует пустые каталоги.

<scp todir="[email protected]:/var/www/html" keyfile="${basedir}\..\keys\prod_default.pem" trust="true">
<fileset dir="${staging.dir}" />
</scp>

Почему дело?

Подробный журнал полного обновления:

D:\BUILD\SCRIPTS>ant -v -f getcom.xml update
Apache Ant(TM) version 1.8.2 compiled on December 20 2010
Buildfile: D:\BUILD\SCRIPTS\getcom.xml
Detected Java version: 1.7 in: C:\Program Files (x86)\Java\jdk1.7.0_02\jre
Detected OS: Windows Server 2008 R2
parsing buildfile D:\BUILD\SCRIPTS\getcom.xml with URI = file:/D:/BUILD/SCRIPTS/getcom.xml
Project base dir set to: D:\BUILD\SCRIPTS
parsing buildfile jar:file:/C:/ant/lib/ant.jar!/org/apache/tools/ant/antlib.xml
with URI = jar:file:/C:/ant/lib/ant.jar!/org/apache/tools/ant/antlib.xml from a zip file
 [property] Loading D:\BUILD\SCRIPTS\build.properties
Build sequence for target(s) `update' is [update]
Complete build sequence is [update, upload, cleanup, staging, export, init, ]

update:
     [exec] Current OS is Windows Server 2008 R2
     [exec] Executing 'C:\\Program Files (x86)\\subversion\\bin\\\svn' with arguments:
     [exec] 'update'
     [exec] 'D:\BUILD\SCRIPTS\..\_STAGING\GETOM'
     [exec] '--username'
     [exec] 'uuuu'
     [exec] '--password'
     [exec] 'uuuu'
     [exec]
     [exec] The ' characters around the executable and arguments are
     [exec] not part of the command.
     [exec] Updating 'D:\BUILD\_STAGING\GETOM':
     [exec] At revision 134.
      [scp] Connecting to xx.0.0.100:22
      [scp] done.
      [scp] Connecting to xx.0.2.100:22
      [scp] done.

BUILD SUCCESSFUL
Total time: 8 seconds

Характеристики:

svn.repoBaseURL="https://[email protected]"
svn.username="uuuu"
svn.password="uuuu"
svn.bin=C://Program Files (x86)//subversion//bin//
MSBuildPath=C://WINDOWS//Microsoft.NET//Framework//v4.0.30319//MSBuild.exe
lib.path.ant-contrib=C:/ant/lib/ant-contrib-1.0b3.jar

Обратите внимание, имена папок изменены.


person Abs    schedule 26.03.2012    source источник
comment
Вы запускали его в подробном режиме?   -  person Chetter Hummin    schedule 26.03.2012
comment
@AmitBhargava Я обновил свой вопрос, чтобы показать, что я получаю в подробном режиме.   -  person Abs    schedule 26.03.2012
comment
Что ж, кажется, что lib.path.ant-contrib воспринимается буквально, а не заменяет значения. Не могли бы вы также поделиться своим файлом свойств сборки?   -  person Chetter Hummin    schedule 26.03.2012
comment
@AmitBhargava Я исправил эту проблему и обновил свой вопрос с помощью журналов, поскольку это не решило исходную проблему.   -  person Abs    schedule 26.03.2012
comment
Всегда ли известен список пустых каталогов? Можете ли вы создать их в отдельном шаге?   -  person Chetter Hummin    schedule 26.03.2012
comment
@AmitBhargava Мне не нужно создавать обходной путь для этого. Мне интересно, есть ли флаг, который мне нужно установить, чтобы позволить муравью включать пустые папки в задачи scp. Включает ли scp пустые каталоги по умолчанию?   -  person Abs    schedule 26.03.2012
comment
Ну, если это не происходит в одну сторону, по крайней мере, у вас есть резервная копия   -  person Chetter Hummin    schedule 26.03.2012
comment
Я вижу getcom.xml, но [...]\GETOM (обратите внимание на отсутствие буквы «C» в последнем) Может ли быть проблема в этом (т.е. вы пытаетесь скопировать несуществующий каталог, а не пустой)?   -  person Attila    schedule 28.03.2012
comment
@Attila Дело не в том, что у меня проблемы с копированием любых файлов/папок. Все они копируются из правильного места в нужное удаленное место. Однако все пустые каталоги игнорируются.   -  person Abs    schedule 28.03.2012


Ответы (1)


Вам придется придумать обходной путь. То, как Ant реализует scp, означает, что пустые каталоги всегда пропускаются.

Суть в том, что класс Scp делает это:

DirectoryScanner scanner = set.getDirectoryScanner(getProject());
Directory root = new Directory(scanner.getBasedir());
String[] files = scanner.getIncludedFiles();
if (files.length != 0) {
    ...
}

Другими словами, он обрабатывает каталог только в том случае, если он содержит хотя бы один файл.

Существует патч для кода задачи Scp, который вы можете рассмотреть, но означает сделанную на заказ сборку Ant.

Два других подхода, которые приходят на ум,

  • сделать каталоги непустыми, заполнив их файлами-заполнителями (которые вы можете удалить после развертывания)
  • создать пустые каталоги на отдельном шаге
person martin clayton    schedule 28.03.2012
comment
Спасибо, Мартин. Я думал, что дело в этом. Я выберу первый вариант, чтобы убедиться, что во всех файлах каталогов есть хотя бы один файл. - person Abs; 02.04.2012