2016-09-08 2 views
0

내가 메이븐 멀티 모듈을 기반으로 웹 응용 프로그램을 구축 오전 .properties 파일을로드 할 수 없습니다. 그래서 내 프로젝트 구조는 다음과 같다 :자바 웹 애플리케이션은 단지

/module1 
    /src/main/java 
     package/Module1.java 
    /src/main/resources 
     conf/i18n_en.properties 
/webapp 
    /src/main/java 
     package/Web.java 
    /src/main/resources 
     conf/i18n_en.properties 
    /src/main/webapp 

내가 모든 모듈의 국제화에 대해 서로 다른 속성 ("i18n_en.properties")를 가지고, 나는 속성 코드 파일을로드하고 정보를 얻을 수 있습니다. 그것은 단일 모듈 테스트에서 잘 실행되는 것 같습니다.

private ResourceBundle rb; 
String filename = BASE_NAME + "_" + LANG + ".properties"; 
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(filename); 
     if(in == null) { 
      in = c.getResourceAsStream(filename); 
     } 
     if (in == null) { 
      in = c.getClassLoader().getResourceAsStream(filename); 
     } 

     if (in != null) { 
       rb = new PropertyResourceBundle(in); 
     } 

그러나 IDEA를 사용하여 바람둥이를 시작하면 프로그램은 webapp의 속성 만로드합니다! "Module1"의 속성을 찾을 수 없습니다!

가 나는 innner 항아리에서로드 속성의 문제 같아요. 배포 된 디렉토리는 다음과 같습니다.

/WEB-INF 
    /classes 
    /conf/i18n_en.properties (from webapp) 
    /lib 
    /Module1.jar (has it's own properties in it) 

정말 혼란 스러웠습니다. 나는 오랫동안 관련된 모든 것을 검색했고 비슷한 것을 발견했지만 문제를 해결할 수는 없습니다. 나는 그들이 말한 것을 다했다고 생각한다. 어디에 문제가 Java WebApp: Loading resource from .jar located in WEB-INF

나는 특성을 내부 항아리를로드하는 몇 가지 방법이 있어야합니다, 모른다. 누군가가 나를 도와주세요, jar 파일에 아주 많이 ~

+0

당신의 BASE_NAME 변수의 값이 무엇입니까? –

+0

BASE_NAME 앞에 '/'를 추가해야합니다. –

+0

예, 말씀하신 것을 시도했습니다. "/ conf/i18n_properties", "conf/i18n_properties"와 같습니다. 항아리에 포장되어 있으면 파일을 찾을 수 없습니다. @ JekinKalariya – Alvin

답변

0

감사 것을 알고, 당신은 요소를 찾기 위해 클래스 로더() 메소드를 사용할 수 없습니다.
당신은 사용할 수 있습니다

try { 
     URL url2 = new URL(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().toString()+your path to file in structre); 
     InputStream in = url2.openStream(); 
} catch (URISyntaxException ex) { 
     Logger.getLogger(PrepareGUI.class.getName()).log(Level.SEVERE, null, ex); 
} 
+0

도움 주셔서 감사합니다. 당신이하고 싶은 것은 jar 파일을 찾을 수있는 URL을 만드는 것입니다. 나는 그것을 시도하고 그것은 정말로 작동합니다! 나는','새로운 URL (... "!"+ c.getProtectionDomain() getCodeSource()의 getLocation의 toString()() + + 파일 이름 "항아리 :")하지만, 나는 다음과 같은 코드를 사용하여 약간의 차이가있다 jar에 대한 특정 URL 형식이 '봄'으로 나타났습니다. – Alvin

+0

'ClassLoader.getResourceAsStream (...)'이 jar 파일을 찾을 수없는 이유를 정말로 알고 싶습니다. 나는 인터넷에서 많은 답변이 조언을 준 것을 보았다. 왜 그런지 알고 있니? 아니면 내가 잘못 받아들 였니? – Alvin

+0

jar 파일을 전에 읽었습니다. 이 기사는 당신의 자원이 JAR 파일에있을 때 더 이상 파일이 아니라고 말합니다. 파일은 파일 시스템의 실제 파일 일뿐입니다. 따라서 ClassLoader.getResourceAsStream (...)을 사용하여 jar 파일을 찾을 수 없습니다. – Numb

관련 문제