@Override
    void scan(final URL codeSourceLocation, final File file) throws IOException {
        final JarFile jarFile = new JarFile(file);
        final Enumeration<JarEntry> entries = jarFile.entries();
        while (entries.hasMoreElements()) {
            final JarEntry entry = entries.nextElement();
            final String name = entry.getName();
            if (entry.isDirectory()) {
                // ignore
            } else if (name.endsWith(".class")) {
                final InputStream in = jarFile.getInputStream(entry);
                try {
                    scanClass(codeSourceLocation, in);
                } finally {
                    in.close();
                }
            } else if (isArchive(name)) {
                final JarInputStream in = new JarInputStream(jarFile.getInputStream(entry));
                try {
                    jarInputStreamScanner.scan(new URL(codeSourceLocation, name), in);
                } finally {
                    in.close();
                }
            } else if (ignore(name)) {
                //System.err.println("ignore jar entry " + entry);
            } else
                LOG.warning("unknown resource " + codeSourceLocation + " / " + name);
        }
    }