code: protected void writeToArchive(File parent, File[] sources, ArchiveOutputStream archive) throws IOException {
          for (File source : sources) {
              String relativePath = IOUtils.relativePath(parent, source);
  
              createArchiveEntry(source, relativePath, archive);
  
              if (source.isDirectory()) {
                  writeToArchive(parent, source.listFiles(), archive);
              }
          }
      }
docs: Recursively writes all given source {@link File}s into the given {@link ArchiveOutputStream}. The paths of the
  sources in the archive will be relative to the given parent {@code File}.
  
  @param parent the parent file node for computing a relative path (see {@link IOUtils#relativePath(File, File)})
  @param sources the files to write in to the archive
  @param archive the archive to write into
  @throws IOException when an I/O error occurs