All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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