in disco-java-agent/disco-java-agent-core/src/main/java/software/amazon/disco/agent/plugin/PluginDiscovery.java [202:243]
static void processJarFile(Instrumentation instrumentation, File jarFile, boolean runtimeOnly) throws Exception {
JarFile jar = new JarFile(jarFile);
Manifest manifest = jar.getManifest();
jar.close();
if (manifest == null) {
log.info("DiSCo(Core) JAR file without manifest found on plugin path, skipping this file");
return;
}
Attributes attributes = manifest.getMainAttributes();
if (attributes == null || attributes.isEmpty()) {
log.info("DiSCo(Core) JAR file found with manifest without any main attributes, skipping this file");
return;
}
//read each pertinent Manifest attribute
String initClassName = attributes.getValue("Disco-Init-Class");
String installableClassNames = attributes.getValue("Disco-Installable-Classes");
String listenerClassNames = attributes.getValue("Disco-Listener-Classes");
String bootstrapClassloader = attributes.getValue("Disco-Bootstrap-Classloader");
//check that at least one of the attributes is present
boolean isPlugin =
(initClassName != null)
|| installableClassNames != null
|| listenerClassNames != null
|| bootstrapClassloader != null;
if (!isPlugin) {
log.info("DiSCo(Core) JAR file manifest contains no Disco attributes, skipping this file");
return;
}
//process the plugin based on the Manifest
String pluginName = jarFile.getName();
pluginOutcomes.put(pluginName, new PluginOutcome(pluginName));
boolean bootstrap = loadJar(instrumentation, jarFile, bootstrapClassloader);
pluginOutcomes.get(pluginName).bootstrap = bootstrap;
processInitClass(pluginName, initClassName, bootstrap);
processInstallableClasses(pluginName, installableClassNames, bootstrap, runtimeOnly);
processListenerClasses(pluginName, listenerClassNames, bootstrap);
}