X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Finspector%2Fjava%2Fcommandline%2FMain.java;h=d4d144ae3eb4e8320f29d47e35f314a09c3ab063;hb=250ce45d956b8c1c9b9247b1e248aab580190451;hp=8fcf5f6f42031ec82df1cd6b35699015efd50f8f;hpb=375d6ff0afd27c71927296cdb9c971a5d0c85341;p=javainspect.git diff --git a/src/main/java/eu/svjatoslav/inspector/java/commandline/Main.java b/src/main/java/eu/svjatoslav/inspector/java/commandline/Main.java index 8fcf5f6..d4d144a 100644 --- a/src/main/java/eu/svjatoslav/inspector/java/commandline/Main.java +++ b/src/main/java/eu/svjatoslav/inspector/java/commandline/Main.java @@ -1,6 +1,5 @@ package eu.svjatoslav.inspector.java.commandline; -import eu.svjatoslav.inspector.java.commandline.CommandlineConfiguration; import eu.svjatoslav.inspector.java.structure.ClassGraph; import java.io.File; @@ -14,9 +13,6 @@ import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; -import static java.io.File.separator; -import static java.lang.System.getProperty; - /** * This class acts as a commandline interface for JavaInspect. */ @@ -41,16 +37,24 @@ public class Main { ClassGraph classGraph = new ClassGraph(); - classGraph.setTargetDirectory(getTargetDirectory(configuration)); + if (configuration.targetDirectory.isSpecified()) + classGraph.setTargetDirectory(configuration.targetDirectory.getValue()); if (configuration.targetImageType.isSpecified()) classGraph.setTargetImageType(configuration.targetImageType.getValue()); classGraph.setKeepDotFile(configuration.keepDotFile.getValue()); - for (File jarFile : jarFiles) - addJarToGraph(jarFile, classLoader, classGraph, configuration); + if (configuration.rootClasses.isSpecified()){ + // add only selected root classes + for (String rootClass : configuration.rootClasses.getValue()) + attemptClassAdditionByName(classLoader, classGraph, configuration, rootClass); + } else { + // add all classes in the jar files to graph + for (File jarFile : jarFiles) + addJarToGraph(jarFile, classLoader, classGraph, configuration); + } configuration.blacklistGlob.getValue().forEach(classGraph::blacklistClassGlob); configuration.whitelistGlob.getValue().forEach(classGraph::whitelistClassGlob); @@ -60,14 +64,6 @@ public class Main { return classGraph; } - private static File getTargetDirectory(CommandlineConfiguration configuration) { - if (configuration.targetDirectory.isSpecified()) - return configuration.targetDirectory.getValue(); - - // default to current directory - return new File(getProperty("user.dir") + separator); - } - private static URL[] getFileUrls(List jarFiles) { List urls = new ArrayList<>(); jarFiles.forEach((File file) -> { @@ -85,11 +81,20 @@ public class Main { 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); + for (String className : getClassNamesFromJar(jarFile)) + attemptClassAdditionByName(classLoader, classGraph, configuration, className); + } + private static void attemptClassAdditionByName(URLClassLoader classLoader, ClassGraph classGraph, CommandlineConfiguration configuration, String className) throws ClassNotFoundException { + if (configuration.isDebug()) + System.out.println("Adding class to graph: " + className); + try { classGraph.add(loadClassByName(classLoader, className)); + } catch (NoClassDefFoundError e){ + if (configuration.isDebug()) + System.out.println("Class definition was not found."); + // Sometimes referenced classes are not found in the same Jar. + // Let's ignore this and proceed with the classes that we have. } }