On 16/11/2020 18:35, Alex Orlov wrote:
:
When I start my application I get: java.lang.IllegalAccessError: class org.springframework.core.log.CompositeLog (in module spring.core) cannot access class org.apache.commons.logging.impl.NoOpLog (in module org.apache.commons.logging) because module org.apache.commons.logging does not export org.apache.commons.logging.impl to module spring.core. To fix it, I wanted in the Framework dynamically addOpens to module (module.addOpens(...)), however, I got Caused by: java.lang.IllegalCallerException: org.apache.commons.logging.impl is not open to module fw.module. To fix it I added jvm argument: --add-opens org.apache.commons.logging/org.apache.commons.logging.impl=fw.module \ However, it didn’t help. It seems to me that jvm arguments add-opens works only when the module that must open
its package is in boot layer, but in my situation fw.module that is in boot 
layer knows nothing about web application modules.
The static defineModulesXXXX methods return a ModuleLayer.Controller that can be used to export or open any package of any module in the layer to any other module. It's the equivalent of using the --add-exports or --add-opens on the command line to export or open packages of modules in the boot layer. So in this case you should be able to use the ModuleLayer.Controller for (I assume) the "Web Application Layer" to export org.apache.commons.logging/org.apache.commons.logging.impl to spring.core. That can be a workaround using spring.core and org.apache.commons.logging agree sort out their differences on whether org.apache.commons.logging.impl is part of the supported API or not.

-Alan.

Reply via email to