protected void getDependencyClassPath(Set visitedArchives, List entries, Set processedEntries, Archive current) { RuntimeClasspathEntry[] local = ((ArchiveImpl) current).getDependencyClassPathAtThisLevel(); for (int i = 0; i < local.length; i++) { RuntimeClasspathEntry entry = local[i]; if (!processedEntries.contains(entry)) { entries.add(entry); processedEntries.add(entry); } Archive resolved = entry.getReferencedArchive(); if (resolved == null) ClasspathUtil.processManifest(entry.getAbsolutePath(), entries, processedEntries); else if (!visitedArchives.contains(resolved)) { visitedArchives.add(resolved); getDependencyClassPath(visitedArchives, entries, processedEntries, resolved); } } }