gpt4 book ai didi

java - 以编程方式提取 JarFile 模块名称的最佳方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:19 26 4
gpt4 key购买 nike

我正在为 Java 9 开发一个使用模块分层的启动器库。为了在层中添加模块,我需要将模块名称(作为字符串)传递给父级的配置。 ModuleLayer Javadoc 在类文档的末尾有一个示例。

现在,我不想让我的库用户承担声明模块名称的负担,我只想允许将 jar 文件位置作为 StringURLFileJarFile

所以我的问题是,给定一个 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(Mod‌​uleDescriptor::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"
);

关于java - 以编程方式提取 JarFile 模块名称的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48016514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com