我有两个模块: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)
我的错误是什么?
答案 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