|
21 | 21 | import java.nio.file.Files; |
22 | 22 | import java.nio.file.Path; |
23 | 23 | import java.nio.file.StandardCopyOption; |
| 24 | +import java.nio.file.FileVisitResult; |
| 25 | +import java.nio.file.SimpleFileVisitor; |
| 26 | +import java.nio.file.attribute.BasicFileAttributes; |
24 | 27 | import java.util.ArrayList; |
25 | 28 | import java.util.Arrays; |
26 | 29 | import java.util.List; |
@@ -180,8 +183,33 @@ public void initialize(Path dataRoot, Path runnerRoot, boolean remake) throws IO |
180 | 183 | for (Resource resource : resources) { |
181 | 184 | Path source = dataRoot.resolve(resource.getSource()); |
182 | 185 | Path target = env.resolve(resource.getTarget()); |
183 | | - Files.createDirectories(target.getParent()); |
184 | | - Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING); |
| 186 | + |
| 187 | + if (Files.isDirectory(source)) { |
| 188 | + Files.walkFileTree(source, new SimpleFileVisitor<>() { |
| 189 | + |
| 190 | + @Override |
| 191 | + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) |
| 192 | + throws IOException { |
| 193 | + Path relative = source.relativize(dir); |
| 194 | + Path dest = target.resolve(relative); |
| 195 | + Files.createDirectories(dest); |
| 196 | + return FileVisitResult.CONTINUE; |
| 197 | + } |
| 198 | + |
| 199 | + @Override |
| 200 | + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) |
| 201 | + throws IOException { |
| 202 | + Path relative = source.relativize(file); |
| 203 | + Path dest = target.resolve(relative); |
| 204 | + Files.createDirectories(dest.getParent()); |
| 205 | + Files.copy(file, dest, StandardCopyOption.REPLACE_EXISTING); |
| 206 | + return FileVisitResult.CONTINUE; |
| 207 | + } |
| 208 | + }); |
| 209 | + } else { |
| 210 | + Files.createDirectories(target.getParent()); |
| 211 | + Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING); |
| 212 | + } |
185 | 213 | } |
186 | 214 |
|
187 | 215 | List<Resource> downloads = new ArrayList<>(); |
|
0 commit comments