2017-09-22 6 views
2

私はモジュールaとモジュールbの2つのモジュールを持っています。 Module-aにはプロパティファイル(com/foo/texts_en.properties)があります。モジュール - 輸出com.fooパッケージモジュール-bでは、このリソースを取得したいと思います。このために私は、モジュール-Bで次の操作を行います。Java 9の別のモジュールからResourceBundleを取得する方法は?

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

Java 9がリリースされたので、javadocの[permanent location](http://docs.oracle.com/javase/9​​/docs/api/)にリンクすると、リンクは長年有効です。来る。 – VGR

+0

@ VGR私は編集しました。私のせい。 –

答えて

2

ResourceBundleの「名前付きモジュールのリソースバンドル」セクションには、名前付きモジュールのリソースの配置方法の詳細が記載されています。

+0

私は正しいのですか? - 'every'リソースバンドルに対して1つのサービス実装を作成することになっていますか?たとえば、モジュールには 'com/foo/texts_en.properties'と' com/boo/messages_en.properties'があります。モジュール-aでResourceBundleProviderの2つの実装を作成する必要がありますか? –

+0

複数の選択肢があります。クラスパスにリソースを残すことができます。あなたはモジュールにリソースを入れることができますが、モジュールはモジュールを必要としないため、モジュールを解決できない可能性があるので、 '--add-modules'を使う必要があります。これを行うと、消費者にパッケージを開くことができ、RBはリソースを見つけることができます。また、リソースバンドルをjavadocごとにサービスプロバイダとしてデプロイすることもできます。後者はセットアップに少し時間がかかりますが、サービスバインディングによってリソースを持つモジュールが確実に解決されることを意味します。 –

+0

あなたの答えは、関連するセクションを引用する必要があります。そうでなければ、これはリンクだけの答えのように思えます。 – SpaceTrucker

関連する問題