如何显示实际的模块路径?
how to show the actual modulepath?
为了调试,我需要查看实际的模块路径。如何在运行时打印出来?
问题:使用 ServiceLoader 根据定义的 API 加载模块在正常运行时环境中工作正常,但在测试中无效。我得找出原因。
由于我是 ServiceLoader 的新手,所以在模块路径上找到提供程序模块可能还不够。但是,我的第一个问题是:即使在测试环境中,它是否在模块路径上?
当你想检查模块是否存在时,可以直接检查模块是否存在,例如
String moduleName = "java.compiler";
ModuleLayer.boot().findModule(moduleName)
.ifPresentOrElse(
m -> System.out.println(m + " loaded via " + m.getClassLoader()),
() -> System.out.println(moduleName + " not found"));
当模块不存在时,您可以使用非标准系统检查模块路径属性,
System.out.println(System.getProperty("jdk.module.path"));
除了路径不匹配的可能性之外,值得检查 context loader of each environment if loading a service fails in one environment, as the method ServiceLoader.load(Class)
uses the context loader 进行搜索。
还要检查模块的 classes 是否意外地提供在旧的 class 路径上。
为了调试,我需要查看实际的模块路径。如何在运行时打印出来?
问题:使用 ServiceLoader 根据定义的 API 加载模块在正常运行时环境中工作正常,但在测试中无效。我得找出原因。
由于我是 ServiceLoader 的新手,所以在模块路径上找到提供程序模块可能还不够。但是,我的第一个问题是:即使在测试环境中,它是否在模块路径上?
当你想检查模块是否存在时,可以直接检查模块是否存在,例如
String moduleName = "java.compiler";
ModuleLayer.boot().findModule(moduleName)
.ifPresentOrElse(
m -> System.out.println(m + " loaded via " + m.getClassLoader()),
() -> System.out.println(moduleName + " not found"));
当模块不存在时,您可以使用非标准系统检查模块路径属性,
System.out.println(System.getProperty("jdk.module.path"));
除了路径不匹配的可能性之外,值得检查 context loader of each environment if loading a service fails in one environment, as the method ServiceLoader.load(Class)
uses the context loader 进行搜索。
还要检查模块的 classes 是否意外地提供在旧的 class 路径上。