2017-12-26 7 views
0

안녕하세요 저는 loader() 메서드를 갖는 ConfigLoader 클래스를 가진 외부 jar에 대한 종속성이있는 Maven 프로젝트에서 작업하고 있습니다. 리소스를로드하는 동안 외부 jar의 클래스가 예외를 throw합니다.

public class ConfigLoader { 
    public void initialize() { 
     loader(); 
    } 
    private static void loader() { 
     URL configURL = ConfigLoader.getClass().getResource("runtimeConfiguration.xml"); 
     //some other method calls to which configURL is an argument. 
    } 
    //other methods of ConfigLoader class 
} 

및 디렉토리 구조는 다음과 같이이다 -

src 
|...main 
|.......java 
|.......resources 
|................dev 
|................prod 

모두 dev에와 자극이 runtimeConfiguration.xml 라는 이름의 파일이 클래스를 사용하는 코드는

public class Application { 
    private Application application; 
    public static void main(String []args){ 
     application = new Application(); 
     application.invokeConfigLoader(); 
     //additional code 
    } 
    private void invokeConfigLoader() { 
     configLoader.initialize(); 
    } 
} 
입니다

내가받는 오류는

입니다.

devpath 폴더를 classpath에 추가하려고 시도했지만 여전히 같은 오류가 발생했습니다. 나는 리눅스 터미널에서이 코드를 실행하려면, 그리고 명령은 내가 (내 모든 exernal 항아리와 자원 폴더를 받는다는 빌드 후 앉아) 트렁크 디렉토리에서 제공하고있다 - 나는 또한 인 IntelliJ 2017.2 등을 사용하고

java -cp /resources/dev/*:configuration-loader.jar 

시도 resources/dev 폴더를 모듈 종속성으로 추가하려면 동일한 오류가 발생합니다. 리소스 폴더는 프로젝트 구조 설정을 통해 라이브러리로 추가됩니다. 나는 많은 것을 찾으려고 노력했지만이 문제로 어떤 질문도 찾지 못했습니다. 이 환경 기반 개발에 익숙하지 않아서 친절하게 도와주세요. 감사합니다.

답변

0

ConfigLoader.getClass().getResource("runtimeConfiguration.xml");은 ConfigLoader가 정의 된 동일한 패키지에서 runtimeConfiguration.xml을 가져 오려고 시도하며 classpath의 루트가 아닙니다. / ~ runtimeConfiguration.xml을 추가하십시오.

클래스 패스에 리소스를 추가하는 방법에 따라 ConfigLoader.getClass().getResource("/runtimeConfiguration.xml"); 또는 ConfigLoader.getClass().getResource("/dev/runtimeConfiguration.xml");을 사용해야합니다.

자세한 내용은 javadoc을 참조하십시오.

+0

답장을 보내 주셔서 감사합니다. 이 getResource를 호출하는 코드는 외부 항아리에서 가져 오므로 변경할 수는 없습니다. – humblecoder

+0

그런 다음 파일을'ConfigLoader' 패키지 이름과 같은 경로에 넣으십시오. 예를 들어'ConfigLoader'가'com.yourcompant.config' 아래에 있다면'com/yopurcompany/config' 디렉토리 아래에'runtimeConfiguration.xml'을 넣으십시오. – tsolakp

+0

config가'src/main/java/com/yourcomapany/config'에 있고'runtimeConfiguration.xml' 파일이'src/main/java/resources'에 있으면'resources' 디렉토리는 자원 루트로 표시됩니다. 그럼 효과가 있을까요? – humblecoder

관련 문제