class ConfigurableClassLoader extends URLClassLoader {

    public List<InputStream> findContainedResources(final String name) {
        try {
            return Stream.concat(ofNullable(super.findResources(name)).map(urls -> list(urls).stream().map(url -> {
                try {
                    return url.openStream();
                } catch (final IOException e) {
                    throw new IllegalStateException(e);
                }
            })).orElseGet(Stream::empty),
                    ofNullable(resources.get(name))
                            .map(s -> s
                                    .stream()
                                    .map(it -> it.resource)
                                    .map(ByteArrayInputStream::new)
                                    .map(InputStream.class::cast))
                            .orElseGet(Stream::empty))
                    .collect(toList());
        } catch (final IOException e) {
            throw new IllegalStateException(e);
        }
    }

    public  ConfigurableClassLoader(final String id, final URL[] urls, final ClassLoader parent,
            final Predicate<String> parentFilter, final Predicate<String> childFirstFilter,
            final String[] nestedDependencies, final String[] jvmPrefixes);
    private  ConfigurableClassLoader(final String id, final URL[] urls, final ClassLoader parent,
            final Predicate<String> parentFilter, final Predicate<String> childFirstFilter,
            final Map<String, Collection<Resource>> resources, final String[] jvmPrefixes);

}