Extension storage based on Java Service Provider (META-INf/services) #85
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This pull request comes with some improvements related to how we store metadata related to
@Extension
in files.Until now we stored the metadata for extensions in a
META-INF/extensions.idx
(one file per plugin, the format is one text line with extension class name for each@Extension
). I propose you a more standard location and format,META-INF/services/<extension-point>
, used by Java Service Provider (seejava.util.ServiceLoader
).The old format (
META-INF/extensions.idx
):The new format (
META-INF/services/ro.fortsoft.pf4j.demo.api.Greeting
):More, I introduced with this PR a new abstraction
ExtensionStorage
so you can write and use your own storage.My goal with this PR is to improve the adoption of PF4J, to allow other people to jump ease from
ServiceLoader
to PF4J.The new versions of PF4J can work OK with the old format,
extensions.idx
(theDefaultExtensionFinder
is a compound betweenServiceProviderExtensionFinder
andLegacyExtensionFinder
).