2017-09-22 7 views
2

J'ai deux modules: module-a et module-b. Module-a a un fichier de propriétés (com/foo/texts_en.properties). Module-a exporte le package com.foo. Dans le module-b je veux obtenir cette ressource. Pour cela, je fais ce qui suit dans le module-b:Comment obtenir ResourceBundle d'un autre module dans Java 9?

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

Voici ce que je reçois:

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) 

Quelle est mon erreur?

+0

Maintenant que Java 9 a été publié, vous devez créer un lien vers la [localisation permanente] de javadoc (http://docs.oracle.com/javase/9/docs/api/) pour que le lien soit valide pendant des années. viens. – VGR

+0

@VGR J'ai édité. Ma faute. –

Répondre

2

La section «Faisceaux de ressources dans les modules nommés» de ResourceBundle fournit des informations détaillées sur la localisation des ressources dans les modules nommés.

+0

Est-ce que je comprends bien? - Il est supposé créer une implémentation de service pour le paquet de ressources 'every'? Par exemple, j'ai dans le module un 'com/foo/texts_en.properties' et' com/boo/messages_en.properties'. Dois-je créer deux implémentations de ResourceBundleProvider dans module-a? –

+0

Vous avez plusieurs choix. Vous pouvez laisser les ressources sur le chemin de la classe. Vous pouvez mettre les ressources dans un module (ce que je pense que vous faites) mais ce module ne peut pas être résolu car aucun module ne l'exige, par conséquent vous devrez peut-être utiliser '--add-modules'. Si vous faites cela, vous pouvez ouvrir les paquets au consommateur et RB sera capable de localiser les ressources. Vous pouvez également déployer les regroupements de ressources en tant que fournisseurs de services selon javadoc. Ce dernier prend un peu de travail à installer mais cela signifie que la liaison de service assurera que les modules avec les ressources sont résolus. –

+0

Votre réponse doit citer la section appropriée. Sinon, cela ressemble plus à une réponse de lien seulement. – SpaceTrucker