Dynamically loading plugin jars using ServiceLoader
Starting from Java 9 the service providing scanning will be much easier and efficient. No more need for META-INF/services
.
In the interface module declaration declare:
uses com.foo.spi.Service;
And in the provider's module:
provides com.foo.spi.Service with com.bar.ServiceImplementation
The problem was very simple. And stupid. In the plugin .jar files the /services/plugintest.SimplePlugin
file was missing inside the META-INF
directory, so the ServiceLoader
couldn't identify the jars as services and load the class.
That's pretty much all, the second (and cleaner) way works like a charm.