in src/main/java/org/apache/maven/plugins/dependency/resolvers/ResolveDependenciesMojo.java [277:335]
private ModuleDescriptor getModuleDescriptor(File artifactFile) {
ModuleDescriptor moduleDescriptor = null;
try {
// Use Java9 code to get moduleName, don't try to do it better with own implementation
Class<?> moduleFinderClass = Class.forName("java.lang.module.ModuleFinder");
java.nio.file.Path path = artifactFile.toPath();
Method ofMethod = moduleFinderClass.getMethod("of", java.nio.file.Path[].class);
Object moduleFinderInstance = ofMethod.invoke(null, new Object[] {new java.nio.file.Path[] {path}});
Method findAllMethod = moduleFinderClass.getMethod("findAll");
Set<Object> moduleReferences = (Set<Object>) findAllMethod.invoke(moduleFinderInstance);
// moduleReferences can be empty when referring to target/classes without module-info.class
if (!moduleReferences.isEmpty()) {
Object moduleReference = moduleReferences.iterator().next();
Method descriptorMethod = moduleReference.getClass().getMethod("descriptor");
Object moduleDescriptorInstance = descriptorMethod.invoke(moduleReference);
Method nameMethod = moduleDescriptorInstance.getClass().getMethod("name");
String name = (String) nameMethod.invoke(moduleDescriptorInstance);
moduleDescriptor = new ModuleDescriptor();
moduleDescriptor.name = name;
Method isAutomaticMethod = moduleDescriptorInstance.getClass().getMethod("isAutomatic");
moduleDescriptor.automatic = (Boolean) isAutomaticMethod.invoke(moduleDescriptorInstance);
if (moduleDescriptor.automatic) {
if (artifactFile.isFile()) {
try (JarFile jarFile = new JarFile(artifactFile)) {
Manifest manifest = jarFile.getManifest();
if (manifest != null
&& manifest.getMainAttributes().getValue("Automatic-Module-Name") != null) {
moduleDescriptor.moduleNameSource = "MANIFEST";
} else {
moduleDescriptor.moduleNameSource = "FILENAME";
}
} catch (IOException e) {
// noop
}
}
}
}
} catch (ClassNotFoundException | SecurityException | IllegalAccessException | IllegalArgumentException e) {
// do nothing
} catch (NoSuchMethodException e) {
getLog().warn(e);
} catch (InvocationTargetException e) {
Throwable cause = e.getCause();
while (cause.getCause() != null) {
cause = cause.getCause();
}
getLog().info("Can't extract module name from " + artifactFile.getName() + ": " + cause.getMessage());
}
return moduleDescriptor;
}