The Java Module System lays the foundation for building modularized applications on the JVM. It doesn't concern itself though with resolving module versions and obtaining modules from remote repositories. This is where Layrry [1] comes in: an API and launcher for modularized Java applications which takes a descriptor of the module layer(s) to assemble, fetches the modules and starts up the application. Also dynamically added and removed plug-ins become a possibility with Layrry.
[1] https://www.morling.dev/blog/plugin-architectures-with-layrry-and-the-java-module-system/