use of com.virjar.vscrawler.web.crawlerloader.VSCrawlerClassLoader in project vscrawler by virjar.
the class VSCrawlerManager method loadJarFile.
private CrawlerBean loadJarFile(File jarFile) throws Exception {
ClassLoader originContextClassLoader = Thread.currentThread().getContextClassLoader();
try {
VSCrawlerClassLoader vsCrawlerClassLoader = new VSCrawlerClassLoader(jarFile, originContextClassLoader);
Thread.currentThread().setContextClassLoader(vsCrawlerClassLoader);
ClassScanner.SubClassVisitor<CrawlerBuilder> subClassVisitor = new ClassScanner.SubClassVisitor<>(true, CrawlerBuilder.class);
// prevent scan parent class loader
ClassScanner.scanJarFile(new JarFile(jarFile), subClassVisitor);
if (subClassVisitor.getSubClass().size() == 0) {
return null;
}
if (subClassVisitor.getSubClass().size() != 1) {
log.error("a crawler jar can only create one crawler,but find {} in {},{}, this jar file load while be ignore", subClassVisitor.getSubClass().size(), jarFile.getAbsoluteFile(), StringUtils.join(subClassVisitor.getSubClass(), ","));
return null;
}
return vsCrawlerClassLoader.loadCrawler(subClassVisitor.getSubClass().get(0).getName(), webApplicationContext);
} finally {
Thread.currentThread().setContextClassLoader(originContextClassLoader);
}
}
Aggregations