7

我有两个模块:module-a 和 module-b。模块-a 具有属性文件 ( com/foo/texts_en.properties)。模块 - 一个导出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)

我的错误是什么?

4

2 回答 2

1

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

于 2017-09-22T16:28:36.673 回答
0

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

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

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

于 2019-11-11T10:58:55.210 回答