Hi Kasper, The problem is that the component engine consists of many modules, and these modules were developed by different teams. Therefore, we need to hide the engine modules from other layers.
After some consideration, I realized the core issue: JPMS doesn’t allow to hide (or make "private") modules within a layer using the layer controller. I’d like to open an issue to suggest adding this capability. By the way, I’m not sure why this feature wasn’t included from the start — perhaps Alan Bateman can tell about it. Best regards, Pavel On 10/27/24 11:24, Kasper Nielsen wrote:
Kasper Nielsen 14:54 (0 minutes ago) to PavelTurk Hi Pavel, Do you really need to use layers here. Can't you simply just export the needed classes from engine to car? module engine { exports com.engine.api to car; exports com.engine.internal to car; } module car { requires engine; } /Kasper On Sat, 26 Oct 2024 at 22:47, PavelTurk <[email protected]> wrote:Hello. I'm developing a multi-layered JPMS application. Let's say that in the boot layer, I have a car component (composed of several jars) that includes an engine (also made up of several jars). All child layers will interact with the car, but they should not have any access to the engine or its jars (classes). To achieve this, I want to place all jars related to the engine in a child layer, thereby hiding these jars and their classes from other child layers. However, I’m concerned that this setup results in the boot layer depending on a child layer, which seems to go against JPMS principles, where typically child layers depend on or use parent layers. My question is: does placing the engine in a child layer violate JPMS principles, and what would be the best approach in this situation? Best regards, Pavel
