+ if (configuration.isDebug())
+ System.out.println("Graph ready.");
+ }
+
+ private static URL[] getFileUrls(List<File> jarFiles) {
+ List<URL> urls = new ArrayList<>();
+ jarFiles.forEach((File file) -> {
+ try {
+ urls.add(file.toURI().toURL());
+ } catch (MalformedURLException e) {
+ throw new RuntimeException(e);
+ }
+ });
+
+ return urls.toArray(new URL[urls.size()]);
+ }
+
+ private static void addJarToGraph(
+ File jarFile, URLClassLoader classLoader, ClassGraph classGraph, CommandlineConfiguration configuration)
+ throws IOException, ClassNotFoundException {
+
+ for (String className : getClassNamesFromJar(jarFile)) {
+ if (configuration.isDebug())
+ System.out.println("Adding class to graph: " + className);
+
+ classGraph.add(loadClassByName(classLoader, className));
+ }
+ }
+
+ private static Class loadClassByName(URLClassLoader classLoader, String className) throws ClassNotFoundException {
+ return Class.forName(className, true, classLoader);
+ }
+
+ public static List<String> getClassNamesFromJar(File jarFile) throws IOException {
+ List<String> result = new ArrayList<>();
+ try (
+ JarInputStream jarInputStream = new JarInputStream(new FileInputStream(jarFile));
+ ) {
+ while (true) {
+ JarEntry jarEntry = jarInputStream.getNextJarEntry();
+ if (jarEntry == null)
+ break;
+
+ if (isClassFile(jarEntry))
+ result.add(getClassNameFromFileName(jarEntry));
+ }
+
+ return result;
+ }
+ }
+
+ private static boolean isClassFile(JarEntry jarEntry) {
+ return jarEntry.getName().endsWith(".class");
+ }
+
+ private static String getClassNameFromFileName(JarEntry jarEntry) {
+ String result = jarEntry.getName().replaceAll("/", "\\.");
+ return result.substring(0, result.lastIndexOf('.'));
+ }