如何从 Java 9 中的另一个模块获取 ResourceBundle?

How to get ResourceBundle from another Module in Java 9?

我有两个模块:模块-a 和模块-b。模块 a 具有属性文件 (com/foo/texts_en.properties)。 Module-a 导出 com.foo 包。在 module-b 中我想得到这个资源。为此,我在模块 b 中执行以下操作:

Module moduleA = ClassFromModuleA.class.getModule();
ResourceBundle resourceBundle = ResourceBundle.getBundle("com/foo/texts",
                Locale.ENGLISH, moduleA.getClassLoader());
System.out.println("TEST :" + resourceBundle.getString(key);

这是我得到的:

Caused by: java.util.MissingResourceException: Can't find bundle for base name com/foo/texts, locale en
    at java.base/java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:2045)
    at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1679)
    at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1572)
    at java.base/java.util.ResourceBundle.getBundle(ResourceBundle.java:1273)

我的错误是什么?

ResourceBundle 的 "Resource Bundles in Named Modules" 部分详细介绍了命名模块中资源的定位方式。

在尝试了所有选项后,我得出的结论是,正确解决此问题的唯一合理方法是将本地化资源包 (*_«locale».properties) 保存在 常规 Jar 而不是创建命名模块。因此,只需创建一个 *.jar 文件,只包含本地化的资源包属性,不包含任何 module-info.

我在 Java9+ 和 JPMS 的迁移指南中添加了注释:

https://github.com/devonfw/devon4j/blob/develop/documentation/guide-jdk.asciidoc#resourcebundles