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