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

时间:2017-09-22 16:16:58

标签: java java-9 java-module

我有两个模块:module-a和module-b。 Module-a具有属性文件(com/foo/texts_en.properties)。 Module-a导出com.foo包。在module-b中我想获得这个资源。为此,我在module-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)

我的错误是什么?

2 个答案:

答案 0 :(得分:1)

ResourceBundle中的“命名模块中的资源包”部分提供了有关命名模块中资源的详细信息。

答案 1 :(得分:0)

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

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

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