Force JPMS to add module to boot layer
Alan Bateman
Alan.Bateman at oracle.com
Mon Jun 22 15:35:10 UTC 2020
On 21/06/2020 19:52, Alex Orlov wrote:
> Hi all,
>
> New version of maven-failsafe-plugin (3.0.0-M5) has been released and now it is possible to have two module-info in one
> project — one in src/main/java and one in src/test/java and to test modules on module -path.
> Trying to use it I found the following.
>
> Failsafe detects right module list using poms and adds it. The problem is that there are jars with module-info, with
> Automatic-Module-Name and jars without anything. And if any module doesn’t show explicit dependency,
> module is not added to boot layer by JPMS. For example, I have many hours story with hibernate and fasterxml.
> In module path I saw:
> /home/alex/.m2/repository/org/hibernate/hibernate-core/5.4.14.Final/hibernate-core-5.4.14.Final.jar
> /home/alex/.m2/repository/com/fasterxml/classmate/1.5.1/classmate-1.5.1.jar
> However, I got java.lang.NoClassDefFoundError: com/fasterxml/classmate/TypeResolver
> Only later, I noticed that on boot layer I had only hibernate (without module-info) but
> fasterxml (with module-info) was ignored by our lovely JPMS.
If hibernate is an automatic module, and if is indeed resolved, then
every observable automatic module will also be resolved. Is there any
way to get maven-failsafe-plugin to reveal the command line that it is
using? Alternatively, is there any way to inject the
"--show-module-resolution" option into the command line that it uses?
That will help to discovered if hibernate is actually resolved.
>
> So, it is necessary to add missed modules via test module-info to boot layer what is a very silly work:
> 1) you add to you pom dependencies that you don’t use
> 2) failsafe detects right dependencies using pom files and does it very well.
>
> So, could anyone answer two my questions:
> 1) Is it possible to force JPMS to add modules even if it think that they won’t be used
> (by the way — nobody asks it).
> 2) As I understand this problem doesn’t appear when we create child layer and add any jars to it.
> In this case JPMS doesn’t ignore any modules. Is this statement right?
>
If you are add "--add-modules" to the command line then it will allow
you to make sure that jackson is in the boot layer. That said, it may
mask some other issue so finding a bit more on what
maven-failsafe-plugin is doing will help the discussion here.
-Alan
More information about the jigsaw-dev
mailing list