docs: protected boolean syncFiles() throws Exception {
  
          Path cacheDir = manifest.resolveCacheDir(getParameters().getNamed());
          log.info(String.format("Using cache dir %s", cacheDir));
  
          phase = "File Synchronization";
  
          if (getParameters().getUnnamed().contains("--offline")) {
              log.info("not updating files from remote, offline selected");
              return false; // to signal that nothing has changed.
          }
          List<LibraryFile> needsUpdate = manifest.files.stream()
                  .filter(LibraryFile::loadForCurrentPlatform)
                  .filter(it -> it.needsUpdate(cacheDir))
                  .collect(Collectors.toList());
  
          if (needsUpdate.isEmpty())
              return false;
  
          Long totalBytes = needsUpdate.stream().mapToLong(f -> f.size).sum();
          Long totalWritten = 0L;
  
          for (LibraryFile lib : needsUpdate) {
              Path target = cacheDir.resolve(lib.file).toAbsolutePath();
              Files.createDirectories(target.getParent());
  
              URI uri;
  
              // We avoid using uri.resolve() here so as to not break UNC paths. See issue #143
              String separator = manifest.uri.getPath().endsWith("/") ? "" : "/";
              uri = URI.create(manifest.uri.toString() + separator + lib.file);
  
  
              try (InputStream input = openDownloadStream(uri); OutputStream output = Files.newOutputStream(target)) {
  
                  byte[] buf = new byte[65536];
  
                  int read;
                  while ((read = input.read(buf)) > -1) {
                      output.write(buf, 0, read);
                      totalWritten += read;
                      Double progress = totalWritten.doubleValue() / totalBytes.doubleValue();
                      updateProgress(progress);
                  }
              }
          }
          return true;
      }