相关疑难解决方法(0)

在Java 9中运行时扫描类路径/模块路径

我似乎无法找到关于是否仍然可以在运行时扫描所有可用类(用于接口,注释等)的任何信息,就像Spring,Reflections和许多其他框架和库当前所做的那样,面对Jigsaw相关的更改类的加载方式.

编辑:这个问题是关于扫描寻找类的真实物理文件路径.另一个问题是关于动态加载类和资源.这是相关的,但非常重复.

更新:Jetty项目为此制定了标准化API的 JEP建议.如果你有办法帮助实现这个目标,请做.否则,等待和希望.

更新2:找到这个相关的发声帖子.引用后代的代码片段:

如果您真的只是想了解启动层中的模块内容(启动时解析的模块),那么您将执行以下操作:

  ModuleLayer.boot().configuration().modules().stream()
         .map(ResolvedModule::reference)
         .forEach(mref -> {
             System.out.println(mref.descriptor().name());
             try (ModuleReader reader = mref.open()) {
                 reader.list().forEach(System.out::println);
            } catch (IOException ioe) {
                 throw new UncheckedIOException(ioe);
             }
         });
Run Code Online (Sandbox Code Playgroud)

java classpath java-platform-module-system java-9 java-module

17
推荐指数
1
解决办法
4206
查看次数

在Java 9中创建了多少个未命名的模块?

我试图了解JPMS的工作原理.

这里开始

类路径还没有完全消失.所有JAR(模块化或非模块化)和类路径上的类都将包含在未命名模块中.与自动模块类似,它导出所有包并读取所有其他模块.但显然它没有名字.因此,命名的应用程序模块不能要求和读取它.未命名的模块又可以访问所有其他模块.

请注意...on the classpath will be contained in the Unnamed Module.模块是单数.

这里开始

为了兼容性,类路径上的所有代码都打包为一个特殊的未命名模块,没有隐藏的包和对整个JDK的完全访问权限.

再次unnamed module.模块是单数.

我是否理解JPMS中始终只有一个未命名的模块?是否意味着在Java9之前开发但未针对Java9更新的应用程序将作为一个未命名的模块加载?

java java-9 java-module unnamed-module

6
推荐指数
2
解决办法
2342
查看次数