class OpearFile implements Opear {

    @Override
    public ClassLoader getPlanClassLoader(final @NotNull ClassLoader parent) {
        final URL[] urls = Stream.of(metadata.getPlanClassPath())
                .map(name -> new File(cacheDir, name)).flatMap(file -> {
                    if (file.isDirectory() || file.getName().endsWith(".jar")) {
                        return compose1(File::toURI, result1(URI::toURL)).apply(file).stream();
                    } else {
                        return Stream.empty();
                    }
                })
                .toArray(URL[]::new);

        if (urls.length > 0) {
            return new URLClassLoader(urls, parent);
        } else {
            return parent;
        }
    }

      OpearFile(final File cacheDir, final OpearMetadata metadata);

}