
com.github.igorsuhorukov.service.MavenServiceLoader Maven / Gradle / Ivy
The newest version!
package com.github.igorsuhorukov.service;
import com.github.smreed.dropship.ClassLoaderBuilder;
import com.github.smreed.dropship.MavenClassLoader;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.ServiceLoader;
public class MavenServiceLoader {
public static Collection loadServices(String gav, Class serviceClass){
return loadServices(gav, null, serviceClass);
}
public static Collection loadServices(String gav, String repo, Class serviceClass){
URLClassLoader mavenClassLoader = getClassLoaderBuilder(repo).forMavenCoordinates(gav);
return loadServices(mavenClassLoader, serviceClass);
}
public static Collection loadServices(ClassLoader classLoader, Class serviceClass) {
Thread currentThread = Thread.currentThread();
ClassLoader prevContextClassLoader = currentThread.getContextClassLoader();
currentThread.setContextClassLoader(classLoader);
try {
ServiceLoader serviceLoader = ServiceLoader.load(serviceClass, classLoader);
Iterator iterator = serviceLoader.iterator();
Collection services = new ArrayList();
while (iterator.hasNext()) {
T service = iterator.next();
if(service!=null){
services.add(service);
}
}
return services;
} finally {
currentThread.setContextClassLoader(prevContextClassLoader);
}
}
private static ClassLoaderBuilder getClassLoaderBuilder(String repo) {
ClassLoaderBuilder classLoaderBuilder;
if (repo!=null && !repo.isEmpty()){
classLoaderBuilder = MavenClassLoader.using(repo);
} else {
classLoaderBuilder = MavenClassLoader.usingCentralRepo();
}
return classLoaderBuilder;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy