2011-01-06 2 views
1

У меня есть дерево каталогов, которое содержит символическую ссылку. (текущий каталог). При попытке перебрать это с помощью Ant FileSet, я получаю следующее сообщение об ошибке:Как избежать символических ссылок с помощью Ant FileSet?

Caught error while checking for symbolic links 
at org.apache.tools.ant.DirectoryScanner.causesIllegalSymlinkLoop(DirectoryScanner.java:1859) 

код, который я использую для создания сканера является:

FileSet files = new FileSet(); 
Project project = new Project(); 
project.setBasedir(dir); 
files.setProject(project); 
files.setDir(project.getBaseDir()); 

files.getDirectoryScanner().setFollowSymlinks(false); 

for(Iterator iter = files.iterator(); iter.hasNext();) {} 

ответ

1

Вы устанавливаете «не следовать» в неправильном месте. Используйте

files.setFollowSymlinks(false); 

вместо

files.getDirectoryScanner().setFollowSymlinks(false); 

кода вы вывесили устанавливаете «не-следовать симлинке» только при сканировании ниже каталога верхнего уровня набора файлов. Символы в каталоге верхнего уровня будут по-прежнему соблюдаться.

Непонятно, из чего вы опубликовали именно то, что вызывает исключение IOException в методе causesIllegalSymlinkLoop() (это исключение попадает на строку 1859). Но если вы установили not-follow на набор файлов, а не на свой внутренний сканер каталогов, метод вообще не будет вызываться.

+0

Если вас привезли сюда после поиска способа не следовать символическим ссылкам, то это не для вас. setFollowSymlinks полностью вводит в заблуждение, он вообще игнорирует символические ссылки. То, что я искал, - это способ не включать набор файлов/каталогов, на которые указывает ссылка symlink в наборе, чего это не делает. – sabujp

 Смежные вопросы

  • Нет связанных вопросов^_^