Включить подкаталоги и исключить их содержимое с помощью FileTree

#gradle #groovy

#gradle #groovy

Вопрос:

 d:build
├── file1.txt
├── folder1
|  └── anotherfile.txt
├── folder2
|  └── subsubfolder
└── folderN
 

Когда я делаю

 println fileTree("d:build").collect()
 

Я получаю

 [d:buildfile1.txt, d:buildfolder1anotherfile.txt]
 

Мне нужны только файлы и папки в этом каталоге

 [d:buildfile1.txt, d:buildfolder1, d:buildfolder2, d:buildfolderN]
 

Причина, по которой я хочу использовать fileTree with .collect() , заключается в том, что он ленив и не вызывает исключения нулевого указателя на этапе настройки.

Как мне это сделать?

Комментарии:

1. зачем вам нужен ваш каталог в тот момент, когда он еще не создан? Я думаю, вам лучше сделать свою задачу зависимой от других задач, чтобы убедиться, что каталог существует к этому моменту -> отсюда и «лень»

2. Попробуйте поместить код, вызывающий исключение нулевого указателя, в замыкание. Позже вызовите это закрытие, и в это время код будет оценен.

3. @injecteer Даже если я сделаю task2 зависимым от task1, все равно будет ошибка, если я попытаюсь поместить файлы в свойство task2, используя что-либо другое, кроме FileTree. В любом случае, я решил эту проблему с помощью FileTree.

4. @Catalin Если бы я изменил это на closure, мне пришлось бы изменить реализацию этого свойства для оценки закрытия. Не то, что я хотел.

5. вы можете перевести обход файлов в фазу исключения с помощью doFirst{} / doLast{}