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;
}