以编程方式提取Jar文件的模块名称的最佳方法是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以编程方式提取Jar文件的模块名称的最佳方法是什么?相关的知识,希望对你有一定的参考价值。
我正在为Java 9开发一个使用模块分层的启动器库。为了在图层中添加模块,我需要将模块名称(作为String)传递给父级的配置。 ModuleLayer
Javadoc在类文档的最后有一个例子。
现在,我不想转发我的库用户的负担来声明模块名称,我想允许只将jar文件位置传递为String
,URL
,File
或JarFile
。
所以我的问题,给出一个JarFile
什么是以编程方式提取模块名称的最简单方法;自动还是申报?
答案
我想到的一种方法是通过ModuleFinder.findAll()
方法来了解目录中存在的模块的名称:
Path jarDirectory1, jarDirectory2;
ModuleFinder finder = ModuleFinder.of(jarDirectory1, jarDirectory2);
Set<ModuleReference> moduleReferences = finder.findAll();
Set<String> moduleNames =
moduleReferences.stream().map(mRef -> mRef.descriptor().name()).collect(Collectors.toSet());
编辑::对于上面的内容,如Alan所建议的,来自其jar的单个模块(自动)可以是:
String moduleName = ModuleFinder.of(path_to_jar)
.findAll().stream().findFirst()
.map(ModuleReference::descriptor)
.map(ModuleDescriptor::name)
.orElse(null);
另一种方法是使用ToolProvider
并调整输出流,以便能够存储以下模块名称:
Optional<ToolProvider> jar = ToolProvider.findFirst("jar");
jar.get().run(
System.out,
System.err,
"--describe-module",
"--file",
"path/to/the/jar/for/example/commons-lang3-3.6.jar"
);
以上是关于以编程方式提取Jar文件的模块名称的最佳方法是什么?的主要内容,如果未能解决你的问题,请参考以下文章
在模块内以编程方式在 Drupal 9 上创建示例内容的最佳技术
如何以编程方式从 YouTube 视频中提取音频? [关闭]
以编程方式填充组合框 dojo (1.8) 的最佳方法是啥?