2017-09-22 7 views
2

두 개의 모듈 module-a와 module-b가 있습니다. 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의 [영구 위치] (http://docs.oracle.com/javase/9/docs/api/)에 링크해야 링크가 수년 동안 유효합니다. 왔다. – VGR

+0

@VGR 내가 편집했습니다. 내 잘못. –

답변

2

ResourceBundle의 "명명 된 모듈의 자원 번들"절에는 명명 된 모듈의 자원 위치에 대한 세부 정보가 나와 있습니다.

+0

맞습니까? -'every '리소스 번들에 대해 하나의 서비스 구현을 생성하기로되어 있습니까? 예를 들어, 나는 모듈에'com/foo/texts_en.properties'와'com/boo/messages_en.properties'를 가지고 있습니다. 모듈 -a에서 ResourceBundleProvider의 두 구현체를 만들어야합니까? –

+0

몇 가지 선택 사항이 있습니다. 클래스 경로에 리소스를 남겨 둘 수 있습니다. 리소스를 모듈에 넣을 수는 있지만 모듈이 필요로하지 않기 때문에이 모듈을 해석 할 수 없기 때문에'--add-modules'를 사용해야 할 수도 있습니다. 이렇게하면 소비자에게 패키지를 열 수 있고 RB는 리소스를 찾을 수 있습니다. 또는, 자원 번들을 javadoc에 따라 서비스 공급자로 전개 할 수 있습니다. 후자는 설정에 약간의 작업이 필요하지만 서비스 바인딩을 통해 리소스가있는 모듈을 확인할 수 있습니다. –

+0

귀하의 대답은 관련 섹션을 인용해야합니다. 그렇지 않으면 이것이 링크 전용 답변과 같은 것처럼 보입니다. – SpaceTrucker