Requires, Exports, and Provides

Tim Ellison Tim_Ellison at
Fri Nov 27 10:21:51 UTC 2015

Hello Paul,

Being explicit would help if there were any ambiguity about the 
declaration, and I'm not convinced that adding the additional syntax would 
be helpful here.

In particular, the current pattern, e.g. "exports java.sql;" fits with the 
existing syntax for an import statement.  That is, we write

   import java.sql.Timestamp;
   import java.sql.*;

and not "import class" and "import package"

As for the service provider, I guess it is a matter of taste, but I'm 
comfortable that the service interface is more prominent than the 
implementation type.


Paul Benedict <pbenedict at> wrote on 25/11/2015 22:48:42:
> Dear EG members, are you still refining syntax? If so, I would like you 
> consider making the keywords a bit more explicit regarding "requires",
> "exports", and "provides/uses" by adding "module", "package", and 
> respectively.
> Personally, I find the explicitness to be much more instantly readable.
> module java.sql {
>     requires module java.logging;
>     requires module java.xml;
>     exports package java.sql;
>     exports package javax.sql;
>     exports package javax.transaction.xa;
>     provides class java.sql.Driver with com.mysql.jdbc.Driver;
> }
> module java.base {
>     ...
>     exports package to
>         module java.corba,
>         module java.logging,
>         module java.sql,
>         module java.sql.rowset,
>         module jdk.scripting.nashorn;
> }
> I also think you could replace "with" with "for" if you flip the 
> provides class com.mysql.jdbc.Driver for java.sql.Driver;
> Cheers,
> Paul

More information about the jpms-spec-comments mailing list