Clarification on META-INF/services from SOTMS

Alan Bateman Alan.Bateman at oracle.com
Thu Mar 17 19:56:53 UTC 2016


On 17/03/2016 18:49, Paul Benedict wrote:
>  From section 4 on Services:
> "The module system could identify service providers by scanning module
> artifacts for META-INF/services resource entries, as the ServiceLoader
> class does today. That a module provides an implementation of a particular
> service is equally fundamental"
>
> My question regards the use of "could" -- a word that indicates
> possibility, not certainty. It's peculiar wording. If the module system
> still uses META-INF/services, then "could" is misleading. So:
>
> 1) Is META-INF/services being planned to go away in the future?
> 2) What is the relationship between META-INF/services and provides/with
> keywords? Who wins in the presence of both?
>
Just to add to Alex's comment.

If an explicit module on the module path has a META-INF/services 
configuration file then it is ignored. The `provides` clauses in the 
module declaration is the only way to declare the service providers. 
There is wording in ServiceLoader javadoc on this but it needs further 
work, as Alex points out.

It may be that a JAR file has both a module-info.java and service 
configuration files. This might arise for libraries that are capable of 
being deployed as both modules and regular JAR files on the class path 
(say with JDK 8).

For automatic modules then the service configuration files is used to 
derive the list of service providers in the module. There is wording in 
the ModuleFinder javadoc on that.

-Alan


More information about the jigsaw-dev mailing list