Difference of module jdk.xml.dom and module jdk.zipfs
Alan Bateman
Alan.Bateman at oracle.com
Thu Mar 25 15:17:29 UTC 2021
On 25/03/2021 14:59, Christian Stein wrote:
> Hi,
>
> Besides their names, contents and purposes. (-:
>
> So, what's the difference of module jdk.xml.dom and
> module jdk.zipfs in respect to their visibility(?) at
> compile and run-time?
>
> Suppose, there's a module test.base declared as:
>
> module test.base {
> requires jdk.xml.dom;
> requires jdk.zipfs;
> }
>
> Compiling it with javac (from JDK 16) works like a charm.
> Running it in a custom module layer fails with:
>
> java.lang.module.FindException:
> Module jdk.xml.dom not found, required by test.base
>
> If I comment out the "requires jdk.xml.dom;" directive,
> everything is fine. Same, if I start the test running process
> with "--add-modules DEFAULT" as an argument.
>
> Am I setting up the module layer in a wrong manner? [1]
> Are there differences between system modules?
> Like all = system 1 + system 2 + incubating?
jdk.zipfs is a service provider module. It `provides` an implementation
of j.nio.spi.FileSystemProvider. The java.base module `uses` this
service so this is the reason why jdk.zipfs is in the boot layer.
Running with --show-module-resolution is a useful way to understand why
a module is in the boot layer.
jdk.xml.dom exports org.w3c.dom APIs that are not defined by Java SE.
It's not in the boot layer in your test because none of the modules
requires it.
When you attempt to create the configuration for a module layer at
runtime then you are (I assume) using the configuration for the boot
layer as the parent. The jdk.xml.dom module is not observable with the
module finder you are using and it's not in the parent configuration so
this is the reason why you get the FindException "module jdk.xml.dom not
found" exception.
There isn't any way to add to the set of modules in the boot layer at
runtime so you have the help the module system by running with
-add-modules jdk.xml.dom. More generally, a container-like program that
is loading plugins and creating module layers at runtime will probably
want to run with --add-modules ALL-SYSTEM to ensure that all "system"
modules are in the boot layer and avoid disappointment at runtime.
-Alan
More information about the jigsaw-dev
mailing list