次の状況を考えてみましょう。私は2つの層を持っています:
- ブートレイヤー
- カスタムレイヤー
ブート層は mycustom 層の親です。私は3つのモジュールを持っています:
- mod.a
- mod.b
- mod.c
mod.a のモジュール情報にある
module mod.a {
requires mod.b;
}
mod.c のモジュール情報には
module mod.c {
requires mod.b;
}
ブート層には mod.a と mod.b があります。mycustom レイヤーには mod.b と mod.c があります (何らかの理由でこのレイヤーに mod.b が必要です)。ただし、次の例外が発生します。
java.lang.module.ResolutionException: mod.c が mod.b という名前の複数のモジュールを読み取ります。
mycustom 層のモジュールのブート層で mod.b を「非表示」にすることは可能ですか? はいの場合、どのように?
これは、mycustom レイヤーを作成する方法です。
ModuleFinder finder = ModuleFinder.of(...);
ModuleLayer parent = ModuleLayer.boot();
Configuration cf = parent.configuration().resolve(finder, ModuleFinder.of(), Set.of("mod.b, mod.c"));
ClassLoader scl = ClassLoader.getSystemClassLoader();
ModuleLayer myCustomLayer = parent.defineModulesWithOneLoader(cf, scl);