Create plugin with library that uses ServiceLoader

I've got a library that uses ServiceLoader to pull in implementation classes.  Standalone it works great, but I'm trying to run the same code while in a plugin and ServiceLoader returns no instances.  I've tried passing a ClassLoader to ServiceLoader.load (both ClassLoader.getSystemClassLoader() and MyClass.class.getClassLoader()), I've tried setting the context classloader on the thread (Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader()), but nothing seems to change the behavior.

Any thoughts, save running this in an entirely separate process?

1 comment
Comment actions Permalink

The implementations for ServiceLoader are configured in files under META-INF/services directory. Are you sure that these files are copied to the plugin output and available at runtime? You may need to put them under 'resources' root.



Please sign in to leave a comment.