代码之家  ›  专栏  ›  技术社区  ›  Pavel_K

如何获得新创建的JPMS层的ClassLoader?

  •  2
  • Pavel_K  · 技术社区  · 6 年前

    也许这是一个简单的问题,但仍然可以找到如何做到这一点。假设我使用以下代码来创建层

    ModuleFinder finder = ModuleFinder.of(moduleCPath);
    ModuleLayer parent = ModuleLayer.boot();
    Configuration cf = parent.configuration().resolve(finder, ModuleFinder.of(), Set.of("module-c"));
    ClassLoader scl = ClassLoader.getSystemClassLoader();
    ModuleLayer myLayer = parent.defineModulesWithOneLoader(cf, scl);
    

    myLayer 创建了一个类加载器。我怎样才能得到这个类加载器的引用 不知道里面有什么课程 模块?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Slaw    6 年前

    ModuleLayer 每个 Module ClassLoader

    层是从配置和函数中的模块图创建的 .

    模块层 没有一个概念 因为不能保证 会有同样的 类装载器 . 取而代之的是 模块 Module.getClassLoader() .

    既然你用的是 ModuleLayer.defineModulesWithOneLoader(Configuration,ClassLoader) 1 然而,这里 保证每个 会有同样的 . 这意味着你可以得到 类装载器 模块 模块层 并将其视为 类装载器 模块层

    ModuleLayer layer = parent.defineModulesWithOneLoader(...);
    ClassLoader loader = layer.modules().iterator().next().getClassLoader();
    

    请注意,如果出现以下情况,这将无法正常工作:


    1方法 defineModulesWithOneLoader defineModulesWithManyLoaders defineModules 对于两个预定义的用例;每个 模块 有相同的 以及每个 模块 有自己的 类装载器 分别是。