Running module jar programatically
Alan Bateman
Alan.Bateman at oracle.com
Wed Dec 2 16:29:14 UTC 2015
On 02/12/2015 15:24, Stephane Epardaud wrote:
> Hi,
>
> I have a modular jar produced by Java 9 EA + Jigsaw, I can run it with
> "java -mp mlib -m my.module", but how can I run it programmatically in Java?
>
> ATM I'm using URLClassLoader to load it and run it, but I _think_ it
> does not make it "modular" and the module package visibility checks are
> turned off.
>
> What should I be looking at to load this module at runtime and run it as
> a Java module?
>
Below is a code fragment to get you started. It assumes a collection of
modules in a directory and you know the name of the main/initial module.
It creates a Configuration by resolving that module by name. That module
might have dependences on other modules in the directory, maybe
dependences on modules in what we call the boot layer. This code
fragments use ModuleClassLoader, that might go away as it's not really
needed. Anyway, might get you started.
-Alan
Path dir = ...
String moduleName = ...
ModuleFinder finder = ModuleFinder.of(dir);
Configuration cf = Configuration.resolve(finder,
Layer.boot().configuration(),
ModuleFinder.empty(),
moduleName);
ModuleClassLoader loader = new ModuleClassLoader(cf);
Layer layer = Layer.create(cf, Layer.boot(), mn -> loader);
Optional<Module> om = layer.findModule(moduleName);
Module mainModule = om.get();
Optional<String> omc = mainModule.getDescriptor().mainClass();
String mainClass = omc.get();
Class<?> c = mainModule.getClassLoader().loadClass(mainClass);
More information about the jigsaw-dev
mailing list