private boolean removeServicesFromJar()

in src/main/java/org/apache/maven/plugins/shade/filter/MinijarFilter.java [203:230]


    private boolean removeServicesFromJar(Clazzpath cp, Set<Clazz> neededClasses, String fileName) {
        boolean repeatScan = false;
        try (JarFile jar = new JarFile(fileName)) {
            for (final Enumeration<JarEntry> entries = jar.entries(); entries.hasMoreElements(); ) {
                final JarEntry jarEntry = entries.nextElement();
                if (jarEntry.isDirectory() || !jarEntry.getName().startsWith("META-INF/services/")) {
                    continue;
                }

                final String serviceClassName = jarEntry.getName().substring("META-INF/services/".length());
                final boolean isNeededClass = neededClasses.contains(cp.getClazz(serviceClassName));
                if (!isNeededClass) {
                    continue;
                }

                try (BufferedReader configFileReader =
                        new BufferedReader(new InputStreamReader(jar.getInputStream(jarEntry), UTF_8))) {
                    // check whether the found classes use services in turn
                    repeatScan = scanServiceProviderConfigFile(cp, configFileReader);
                } catch (final IOException e) {
                    log.warn(e.getMessage());
                }
            }
        } catch (final IOException e) {
            log.warn("Not a JAR file candidate. Ignoring classpath element '" + fileName + "' (" + e + ").");
        }
        return repeatScan;
    }