Adding modules from a child layer

Alan Bateman alan.bateman at oracle.com
Fri Mar 14 11:23:01 UTC 2025



On 14/03/2025 10:54, Simone Bordet wrote:
> :
>
> The question is whether there is a way for a child ModuleLayer to
> perform the equivalent of "--add-modules", but programmatically at
> runtime, that would add the module to the graph?

Module layers are immutable so you can't modify the boot layer at runtime.

In this case, the initial module is a named module that doesn't 
transitively require java.instrument so that module is not in the boot 
layer. If they server was started with -javaagent then the 
java.instrument would be in the boot layer.  In JEP 261 the 
recommendation for container apps, like this one, is to run with 
--add-module ALL-DEFAULT and it will ensure that any module in the 
run-time that exports an API will be in the boot layer.

A comment in passing is that it's surprising that there are modules in 
ee$N layers requiring java.instrument. The classes in this modules 
aren't normally used by libraries and applications, instead they work as 
the side channel for agents.

> As a side question, I was wondering what is the benefit of using
> ModuleLayers versus just using ClassLoaders.
> I can think of earlier error detection: if the ModuleLayer is not
> setup correctly (as above) I get an early error, which I would only
> get much later at runtime if I was using ClassLoaders.
Right, that's part of reliable configuration where errors are detected 
in pre-flight checks rather than failing mid-flight. The other part is 
strong encapsulation. ClassLoader can provide isolation but they are 
just part of the setup as class loaders otherwise just load classes.

-Alan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/jigsaw-dev/attachments/20250314/4e61110b/attachment.htm>


More information about the jigsaw-dev mailing list