@Override
    protected Enumeration<URL> findResources(String name) throws IOException {
        List<URL> resources = new ArrayList<>();

        // Search for the artifact in the plugin WAR itself
        Enumeration<? extends ZipEntry> entries = this.pluginArtifactZip.entries();
        while (entries.hasMoreElements()) {
            ZipEntry zipEntry = entries.nextElement();
            if (zipEntry.getName().equalsIgnoreCase(name)) {
                try {
                    resources.add(extractResource(zipEntry));
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }

        // Now also add any resources found in dependencies
        ZipEntry entry;
        File file;
        for (ZipFile zipFile : this.dependencyZips) {
            entry = zipFile.getEntry(name);
            if (entry != null) {
                try {
                    file = new File(zipFile.getName());
                    URL zipUrl = file.toURI().toURL();
                    URL entryUrl = new URL("jar:" + zipUrl + "!/" + name);
                    resources.add(entryUrl);
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
            }
        }

        // Return the discovered resources as an Enumeration
        final Iterator<URL> iterator = resources.iterator();
        return new Enumeration<>() {
            @Override
            public boolean hasMoreElements() {
                return iterator.hasNext();
            }
            @Override
            public URL nextElement() {
                return iterator.next();
            }
        };
    }
@see java.lang.ClassLoader#findResources(java.lang.String)
common/plugin/src/main/java/io/apiman/common/plugin/PluginClassLoader.java