/** * * @return - a list of jar pairs that have overlapping class files - scans the whole classpath * */ public List<JarPair> findOverlappingJars(boolean excludeSameSizeDups) { return findOverlappingJars(findAllClasspathResources(), excludeSameSizeDups); }
/** * Finds all class loaders on the classpath. * * All classloaders names will be returned, with an indication if they are supported by jHades or not. * * @return */ public List<ClazzLoader> findAllClassLoaders() { return findAllClassLoaders(getClass().getClassLoader()); }
/** * * Scans the classpath for all resource files. * * @return - the full list of resources on the classpath, including all its known versions. */ public List<ClasspathResource> findAllClasspathResources() { List<ClasspathEntry> classpathEntries = findAllClasspathEntries(); return ClasspathEntries.findClasspathResourcesInEntries(classpathEntries, logger, null); }
/** * * Finds a list of all classpath resources that contain duplicates. * * A duplicate classpath resource can be for example a configuration file such as log4.xml, that exists by accident * multiple times on the classpath. * * @param excludeSameSizeDups - excludes from the reports files for which all classpath versions have the same size * @return classpath resources that have multiple versions on the classpath */ public List<ClasspathResource> findAllResourcesWithDuplicates(boolean excludeSameSizeDups) { List<ClasspathResource> resourceFiles = findAllClasspathResources(); return ClasspathResources.findResourcesWithDuplicates(resourceFiles, excludeSameSizeDups); }
public JHades multipleClassVersionsReport(boolean excludeSameSizeDups) { List<ClasspathResource> resourcesWithDuplicates = scanner.findAllResourcesWithDuplicates(excludeSameSizeDups); DuplicatesReport report = new DuplicatesReport(resourcesWithDuplicates); report.print(); return this; }
private void findOverlappingJarsPairs(List<ClasspathResourceVersion> versions, Map<JarPair, JarPair> overlapPairs, int anchorIndex) { ClasspathResourceVersion anchor = versions.get(anchorIndex); for (int i = anchorIndex + 1; i < versions.size(); i++) { JarPair overlapPair = new JarPair( anchor.getClasspathEntry(), versions.get(i).getClasspathEntry()); if (!overlapPairs.containsKey(overlapPair)) { overlapPairs.put(overlapPair, overlapPair); } overlapPairs.get(overlapPair).incrementDupClassesTotal(); } if (anchorIndex + 1 < versions.size()) { findOverlappingJarsPairs(versions, overlapPairs, anchorIndex + 1); } } }
/** * * @return - a list of jar pairs that have overlapping class files - scans the whole classpath * * By default all duplicates are shown * */ public List<JarPair> findOverlappingJars() { return findOverlappingJars(findAllClasspathResources(), false); }
/** * * Scans the classpath for all resource files. * * @return - the full list of resources on the classpath, including all its known versions. */ public List<ClasspathResource> findAllClasspathResources() { List<ClasspathEntry> classpathEntries = findAllClasspathEntries(); return ClasspathEntries.findClasspathResourcesInEntries(classpathEntries, logger, null); }
/** * * Finds a list of all classpath resources that contain duplicates. * * A duplicate classpath resource can be for example a configuration file such as log4.xml, that exists by accident * multiple times on the classpath. * * @param excludeSameSizeDups - excludes from the reports files for which all classpath versions have the same size * @return classpath resources that have multiple versions on the classpath */ public List<ClasspathResource> findAllResourcesWithDuplicates(boolean excludeSameSizeDups) { List<ClasspathResource> resourceFiles = findAllClasspathResources(); return ClasspathResources.findResourcesWithDuplicates(resourceFiles, excludeSameSizeDups); }
/** * Finds all class loaders on the classpath. * * All classloaders names will be returned, with an indication if they are supported by jHades or not. * * @return */ public List<ClazzLoader> findAllClassLoaders() { return findAllClassLoaders(getClass().getClassLoader()); }
public JHades multipleClassVersionsReport(boolean excludeSameSizeDups) { List<ClasspathResource> resourcesWithDuplicates = scanner.findAllResourcesWithDuplicates(excludeSameSizeDups); DuplicatesReport report = new DuplicatesReport(resourcesWithDuplicates); report.print(); return this; }
private void findOverlappingJarsPairs(List<ClasspathResourceVersion> versions, Map<JarPair, JarPair> overlapPairs, int anchorIndex) { ClasspathResourceVersion anchor = versions.get(anchorIndex); for (int i = anchorIndex + 1; i < versions.size(); i++) { JarPair overlapPair = new JarPair( anchor.getClasspathEntry(), versions.get(i).getClasspathEntry()); if (!overlapPairs.containsKey(overlapPair)) { overlapPairs.put(overlapPair, overlapPair); } overlapPairs.get(overlapPair).incrementDupClassesTotal(); } if (anchorIndex + 1 < versions.size()) { findOverlappingJarsPairs(versions, overlapPairs, anchorIndex + 1); } } }
/** * * @return - a list of jar pairs that have overlapping class files - scans the whole classpath * */ public List<JarPair> findOverlappingJars(boolean excludeSameSizeDups) { return findOverlappingJars(findAllClasspathResources(), excludeSameSizeDups); }
public JHades printClasspath() { System.out.println("\n>> jHades printClasspath >> Printing all class folder and jars on the classpath:\n"); List<ClasspathEntry> classpathEntries = scanner.findAllClasspathEntries(); ClazzLoader clazzLoader = null; for (ClasspathEntry entry : classpathEntries) { if (entry.getClassLoader() != null && !entry.getClassLoader().equals(clazzLoader)) { System.out.println(); // line break between class loaders clazzLoader = entry.getClassLoader(); } System.out.println(entry.getClassLoaderName() + " - " + entry.getUrl()); } endCommand(classpathEntries.size() > 0); return this; }
/** * * Search for a given class on the classpath, returns the list of all class versions. * * @param clazz - the class being searched. * @return - the classpath resource containing all the class versions, or null if not found */ public ClasspathResource findClass(Class clazz) { String classResourceName = clazz.getName().replace(".", "/") + ".class"; List<ClasspathResource> allResources = findAllClasspathResources(); ClasspathResource foundResource = null; for (ClasspathResource resource : allResources) { if (resource != null && resource.getName() != null && resource.getName().endsWith(classResourceName)) { foundResource = resource; break; } } return foundResource; }
public JHades printClassLoaderNames() { System.out.println("\n>> jHades printClassLoaders >> Printing classloader class names (ordered from child to parent):\n"); List<ClazzLoader> classLoaders = scanner.findAllClassLoaders(); boolean notSupportedFound = false; for (ClazzLoader classLoader : classLoaders) { if (classLoader.isSupported()) { System.out.println(classLoader.getName()); } else { notSupportedFound = true; System.out.println(classLoader.getName() + " - NOT SUPORTED"); } } endCommand(classLoaders.size() > 0); if (notSupportedFound) { System.out.println("Note: NOT SUPPORTED class loader means that any classes loaded by such a classloader will not be found on any jHades queries. \n"); } return this; }
/** * * @return - a list of jar pairs that have overlapping class files - scans the whole classpath * * By default all duplicates are shown * */ public List<JarPair> findOverlappingJars() { return findOverlappingJars(findAllClasspathResources(), false); }
public JHades printClasspath() { System.out.println("\n>> jHades printClasspath >> Printing all class folder and jars on the classpath:\n"); List<ClasspathEntry> classpathEntries = scanner.findAllClasspathEntries(); ClazzLoader clazzLoader = null; for (ClasspathEntry entry : classpathEntries) { if (entry.getClassLoader() != null && !entry.getClassLoader().equals(clazzLoader)) { System.out.println(); // line break between class loaders clazzLoader = entry.getClassLoader(); } System.out.println(entry.getClassLoaderName() + " - " + entry.getUrl()); } endCommand(classpathEntries.size() > 0); return this; }
/** * * Search for a given class on the classpath, returns the list of all class versions. * * @param clazz - the class being searched. * @return - the classpath resource containing all the class versions, or null if not found */ public ClasspathResource findClass(Class clazz) { String classResourceName = clazz.getName().replace(".", "/") + ".class"; List<ClasspathResource> allResources = findAllClasspathResources(); ClasspathResource foundResource = null; for (ClasspathResource resource : allResources) { if (resource != null && resource.getName() != null && resource.getName().endsWith(classResourceName)) { foundResource = resource; break; } } return foundResource; }
public JHades printClassLoaderNames() { System.out.println("\n>> jHades printClassLoaders >> Printing classloader class names (ordered from child to parent):\n"); List<ClazzLoader> classLoaders = scanner.findAllClassLoaders(); boolean notSupportedFound = false; for (ClazzLoader classLoader : classLoaders) { if (classLoader.isSupported()) { System.out.println(classLoader.getName()); } else { notSupportedFound = true; System.out.println(classLoader.getName() + " - NOT SUPORTED"); } } endCommand(classLoaders.size() > 0); if (notSupportedFound) { System.out.println("Note: NOT SUPPORTED class loader means that any classes loaded by such a classloader will not be found on any jHades queries. \n"); } return this; }