@Override
    protected void processClasspathResources(List<ClasspathResource> classpathResources) {

        updateStatus("Searching for overlaping jars");
        List<JarPair> overlapReportLines = scanner.findOverlappingJars(classpathResources, false);

        for (JarPair overlapPair : overlapReportLines) {
            Json jsonObject = new Json();
            jsonObject.setProperty("jar1", overlapPair.getJar1().getUrl());
            jsonObject.setProperty("jar2", overlapPair.getJar2().getUrl());
            jsonObject.setProperty("dupsTotal", overlapPair.getDupClassesTotal().toString());
            String json = jsonObject.stringify();
            System.out.println("#OVERLAP_JARS# " + json);
        }

        System.out.println("#SUMMARY_FINISHED#");

        if (isReportClassFileDuplicatesOn) {
            updateStatus("Searching for class file duplicates");
            List<ClasspathResource> classFilesWithDuplicates = scanner.findClassFileDuplicates(classpathResources, false);

            // class file duplicates report
            for (ClasspathResource classFile : classFilesWithDuplicates) {
                Matcher matcher = FILE_NAME.matcher(classFile.getName());
                if (matcher.matches()) {
                    String packageName = matcher.group(1);
                    String className = matcher.group(2);

                    if (packageName != null) {
                        packageName = packageName.replaceAll("/", "\\.");
                    }

                    Json jsonObject = new Json();
                    jsonObject.setProperty("packageName", packageName);
                    jsonObject.setProperty("className", className);
                    jsonObject.setProperty("numberOfVersions", "" + classFile.getNumberOfVersions());
                    String json = jsonObject.stringify();
                    System.out.println("#DUPLICATE_CLASS# " + json);
                } else {
                    logger.error("could not process " + classFile.getName());
                }
            }

            for (ClasspathResource classFile : classFilesWithDuplicates) {
                for (ClasspathResourceVersion resourceVersion : classFile.getResourceFileVersions()) {
                    String fileFullPathName = classFile.getName();
                    String classpathEntry = resourceVersion.getClasspathEntry().getUrl();
                    if (classpathEntry != null) {
                        Matcher matcher = JAR_NAME.matcher(classpathEntry);
                        if (matcher.matches()) {
                            classpathEntry = matcher.group(1);
                        }
                    }
                    long size = resourceVersion.getFileSize();
                    Json json = new Json();
                    json.setProperty("size", Long.toString(size));
                    json.setProperty("file", fileFullPathName);
                    json.setProperty("entry", classpathEntry);
                    System.out.println("#DETAIL# " + json.stringify());
                }
            }

        }
    }