1. I see that JDK-8347283 was closed with your comment. I don't agree with you
decision, but I can be wrong. Let me explain, why I think that is wrong using
this concrete example.
Boot layer has jdk modules and main application modules. The CORE module of the
application creates plugins with child layers. No one in the world can know
what plugins will be created and used when the main application starts. Now,
somewhere in the future, the module A from plugin X will require module B from
boot layer to open its package to module A. I believe, that the only solution
to do it is to provide the controller of the boot layer.
2. Now, I tried to do apiModule.addOpens in CORE module. I got:
java.lang.IllegalCallerException: com.foo.api.packagename is not open to module
com.foo.core
at java.base/java.lang.Module.addOpens(Module.java:918) ~[?:?]
Therefore, as far as I understand, for the solution you are suggesting to work,
the packagename package of the API module must be opened to the Core module.
But the main problem, as I've said above - no one knows in advance which
packages of which modules from the boot layer will need to be opened/exported,
etc., to the plugins that will be created by users and deployed dynamically.
So, I still have no solution for this problem. This question is very important
for me. If you say, that boot layer controller can't be provided, please,
suggest a good solution for this problem. I think you will agree that to
open/export all packages of all modules of the boot layer to CORE module is a
bad solution. I really need to find a way how to do to, so I will test every
your suggestion.
On 1/12/25 10:35, Alan Bateman wrote:
On 11/01/2025 22:06, Code Ranger wrote:
I have an application that consists of a main part and plugins. The main part
is in the boot layer, and for each plugin, a child layer is created. Plugins
are dynamically added and removed.
In one of my plugins, I use Gson, which requires the API module (located in the
boot layer) to open a package to Gson. The boot layer controller is not
accessible.
Important! A few days ago (2025-01-08), I created an issue with ID 9077987
suggesting providing access to the boot layer controller, as it is impossible
to work without it. However, my issue probably hasn't been reviewed yet, as I
haven't received an email with the JDK_ID.
JDK-8347283 [1] was created a few days ago, looks like the same topic.
From the information in this mail then it looks like the API module (in the
boot layer) will need to open, using Module.addOpens, its package to the plugin
that uses Gson. The plugin will then, in turn, open it to the Gson module. The
API module doesn't need to know anything about Gson in this setup, but it does
allow need to allow for plugins that possibly break in.
-Alan
[1] https://bugs.openjdk.org/browse/JDK-8347283