}
}
private Map<String, Set<String>> scanBasePackages(List<String> basePackages) {
try {
AnnotationDB db = createAnnotationDB();
for (String basePackage : basePackages) {
String resource = basePackage.replace('.', '/');
Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources(resource);
if (!urls.hasMoreElements()) {
logger.error("There's no occurence of package {} in classpath", basePackage);
continue;
}
do {
URL url = urls.nextElement();
String file = url.getFile();
file = file.substring(0, file.length() - resource.length() - 1);
if (file.charAt(file.length() - 1) == '!') {
file = file.substring(0, file.length() - 1);
}
if (!file.startsWith("file:")) {
file = "file:" + file;
}
db.scanArchives(new URL(file));
} while (urls.hasMoreElements());
}
return db.getAnnotationIndex();
} catch (IOException e) {
throw new ScannerException("Could not scan base packages", e);
}
}