Using ServiceLoader with modules
Alex Buckley
alex.buckley at oracle.com
Mon Oct 14 20:58:08 UTC 2019
// cc'ing the list because best practices should be public, and
// because it's easier to refer people to it in five years time
Hi Christian,
On 10/14/2019 12:16 PM, Christian Stein wrote:
> just read your mail and was wondering if this extrapolation is correct:
>
> A module that does not export any package should never need to
> declare a "requires" as transitive.
Some qualification needed, I think. There are (at least) two kinds of
"top level" module that commonly have no `exports` clauses:
1. An "application module" intended to be launched (`java -m bizapp`)
rather than programmed against. I agree that this kind of module should
not use `requires transitive`.
2. An "aggregator module" intended to present a facade composed from the
APIs of other modules. For example, the `java.se` module has no
`exports`, but makes good use of `requires transitive`. (See
http://hg.openjdk.java.net/jdk/jdk/file/tip/src/java.se/share/classes/module-info.java.)
> For example, I should remove all `transitive` modifiers from this module
>
> module org.junit.platform.console {
> requires transitive org.apiguardian.api;
> requires transitive org.junit.platform.reporting;
> provides java.util.spi.ToolProvider
> with org.junit.platform.console.ConsoleLauncherToolProvider;
> }
This "console" module certainly looks like #1 rather than #2.
Alex
More information about the jigsaw-dev
mailing list