如何列出所有(!)所有模块的JPMS服务。我的意思是,我需要当前在运行JVM时可以使用的所有服务的列表。我在网上找过了,但还是找不到办法。
发布于 2018-01-13 18:07:45
答案是艾伦·贝特曼在评论中给出的。
ModuleLayer.boot()
.modules()
.stream()
.map(Module::getDescriptor)
.filter(md -> !md.provides().isEmpty())
.forEach(md -> System.out.format("%s -> %s%n", md.name(), md.provides()));发布于 2018-01-12 05:00:40
没有这样的命令,但您可以在命令行中组合一些内容来实现它。以下是如何在Linux上执行此操作。
首先创建一个包含所有模块描述符的文件。(您实际上不必这样做,您可以通过管道将其传递到其余部分,但这部分需要时间,而且您可能更经常需要它们,因此存储它们是有意义的。)
java --list-modules
| sed -e 's/@.*//'
| xargs -n1 java --describe-module
> module-descriptors这将列出所有模块,删除版本字符串,然后让Java描述每个模块,其中包括模块描述符(因此使用和提供的服务)。
下一步是只grep uses指令,删除uses部分,并在删除重复项的同时对剩余的类型名称进行排序:
cat /opt/jdk-9/module-descriptors
| grep "uses"
| sed 's/uses //'
| sort -u我已经将输出放到了a gist中。
https://stackoverflow.com/questions/48214468
复制相似问题