1

次の状況を考えてみましょう。私は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);
4

0 に答える 0