> On 8 Oct 2025, at 19:39, Alan Bateman <[email protected]> wrote:
>
>
>
> On 08/10/2025 06:19, Jaroslav Tulach wrote:
>>
>> How that is supposed to work? How do I create a `ModuleLayer` with just
>> `java.base` and control what the Enso library JARs can access? Can I control
>> that regardless of how the JVM was initialized? There must a a way, right? Or
>> am I asking for too much encapsulation?
> I think what you are looking for is to create the Configuration for a child
> layer in a way that "hides" all but java.base from the modules in the parent
> configuration. There isn't a way to do this as resolution time. That is, if
> the configuration for the parent/boot has java.base, enso, and apache.foo
> (used by enso) then there is no way to have resolution fail if a user module
> requires enso or requires apache.foo.
>
> Who creates the configuration for the child layer? Can it process the
> Configuration and fail if any module in the configurations reads a module
> other than java.base?
Another approach would be to have only a closed “bootstrap" module in module
path. It would provide main class, initialize a module layer with all Enzo
modules and their dependencies, and pass execution to it.
Since bootstrap module does not export anything and is closed, having it in a
boot layer would be harmless.
The downside is that with such setup there is no way to package Enzo and its
dependencies in runtime image generated by jpackage.
—
Michal