在Java9之前,我可以获取URLClassLoader
实例并获取包含类路径上所有项目的URL[]
:jar和文件夹。
我怎样才能在Java9中做到这一点?如果我可以使用常规 API并且不强制用户添加其他VM标记或谁知道什么,那将是非常酷的。
现在,我可以获取当前模块的类路径:
Module module = MyClass.class.getModule();
module.getClassLoader().getResource(
classNameToResourceName(MyClass.class));
这可以给我一些像file:/Users/.....
。对于任何明确的第三方模块类,我都可以这样做,例如jar:file:///Users...
。
我知道如果ModuleFinder
找到已经在某个路径上的模块 - 这就是我想在这里找到的东西。
我不知道如何获取其他模块/ jar的路径,而无需显式使用模块/ jar中的类(如上所示)。
System.getProperty("java.class.path")
没有工作,因为它没有给出类路径,在Java9示例中,我试过它只返回IntelliJ IDEA的jar。
原因很明显:类路径扫描。这个功能并不是框架的新功能。例如,用户可以构建一个类,对其进行注释并完成 - 框架将找到它并为他/她注册。
编辑:建议的重复问题确实是相同的(关于扫描),但是,答案是有帮助的,但它并不完整。