如何列出所有 JPMS 服务?
How to list all JPMS services?
如何列出所有模块的所有(!)JPMS 服务。我的意思是我需要 运行 JVM 当前可以使用的所有服务的列表。我已经在网上搜索了,还是找不到方法。
没有这样的命令,但你可以在命令行中组合一些东西来实现它。 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。
艾伦·贝特曼在评论中给出了答案。
ModuleLayer.boot()
.modules()
.stream()
.map(Module::getDescriptor)
.filter(md -> !md.provides().isEmpty())
.forEach(md -> System.out.format("%s -> %s%n", md.name(), md.provides()));
如何列出所有模块的所有(!)JPMS 服务。我的意思是我需要 运行 JVM 当前可以使用的所有服务的列表。我已经在网上搜索了,还是找不到方法。
没有这样的命令,但你可以在命令行中组合一些东西来实现它。 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。
艾伦·贝特曼在评论中给出了答案。
ModuleLayer.boot()
.modules()
.stream()
.map(Module::getDescriptor)
.filter(md -> !md.provides().isEmpty())
.forEach(md -> System.out.format("%s -> %s%n", md.name(), md.provides()));