Please see the attached project. It has three Maven modules, each defining its own JPMS module. The application module depends on an interface from the studentservice module, and the implementation for that interface lives in studentservice-provider. The module-info.java for the studentservice-provider module declares the implementation of that interface.
When you run the application using ./manually.sh, it correctly loads the studentservice-provider module. When you run the IT, it does not.
The application prints the module path to standard out.
From the test script it prints:
From the integration test, which starts the same application, it prints:
Note how in the integration test the studentservice-provider is missing in the output.