Как вы можете копировать из подкаталогов в Gradle? - PullRequest
0 голосов
/ 01 октября 2019

Предположим, у меня следующая структура папок:

folder
  -subfolderA
    -module1.mod
      -module1.a
      -module1.b
      -module1.c
    -module2.mod
      -module2.a
      -module2.b
      -module2.c
    -module1.d
  -subfolderB
    -module3.mod
      -module3.a
      -module3.b
      -module3.c
    -module3.d

Я бы хотел сгладить только уровень каталогов "подпапок", создавая следующее:

outputFolder
  -module1.mod
    -module1.a
    -module1.b
    -module1.c
  -module2.mod
    -module2.a
    -module2.b
    -module2.c
  -module3.mod
    -module3.a
    -module3.b
    -module3.c
  -module1.d
  -module3.d

Iожидал, что это будет очень просто, с:

copy {
    from "folder/*/"
    into "outputFolder"
}

Но это не сработало. Какой самый простой способ сгладить один (или несколько) слоев подкаталогов?

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Вы, вероятно, могли бы сделать это как

copy {
    from 'folder' 
    include '*/**/*.*' 
    eachFile { FileCopyDetails fcd ->
        int slashIndex = fcd.path.indexOf('/')
        fcd.path = fcd.path.substring(slashIndex+1)
    } 
    into "outputFolder"
} 

Или, возможно,

copy {
   from { file('folder').listFiles().findAll { it.directory } } 
   into "outputFolder"
} 
0 голосов
/ 05 октября 2019

Я в итоге остановился на следующем, как на лучшей комбинации чистоты и настраиваемости. Изменяя n, вы можете сгладить столько каталогов, сколько захотите:

copy {
    from {
        file("folder")
        include "**/*"
        eachFile { file ->
            file.relativePath = new RelativePath(true, file.relativePath.segments.drop(n))
        }
        includeEmptyDirs = false
    }
    into "outputFolder"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...