2016-10-13 5 views
1

Eclipse에서 Maven 프로젝트 인 main() 메서드를 사용하고 있습니다. 프로젝트에 포함 된 리소스를 사용하는 종속성이 있습니다. 즉, 파일에 /src/main/resources이 포함되어 있습니다. 프로젝트에서 실행 가능한 JAR 파일을 만들고 싶습니다. 문제는 - 임베디드 리소스를로드하는 방법에 따라 - java -jar my.jar을 사용하여 실행 가능한 JAR로 프로젝트를 실행하거나 Eclipse에서 직접 실행할 수 있지만 모두이 아니므로이 경로가 두 가지 경우에서 자원이 분명히 다릅니다./src/main/resources에서 Eclipse와 실행 가능한 JAR에서 직접 작동하는 방법으로 리소스를로드하는 방법은 무엇입니까?

예를 들어, 다음과 같이 나는 자원을로드 할 수

// Loads /src/main/resources/script.rb; 
// Works when run directly from Eclipse; throws an exception when run as a runnable JAR 
InputStream resource = this.getClass().getResourceAsStream("/script.rb"); 

이 방법, 나는 성공적 이클립스에서 직접 프로젝트를 실행할 수 있습니다. Eclipse의 Export → Runnable JAR file을 사용하여 실행 가능한 JAR을 만들면 리소스가 JAR의 루트에있는 resources 폴더에 저장되므로 java -jar my.jar으로 실행하려고하면 위의 코드가 실패합니다.

// Works when run as 'java -jar my.jar', fails when run from Eclipse. 
InputStream resource = this.getClass().getResourceAsStream("/resources/script.rb"); 

지금 내 보낸 JAR 파일이 잘 작동

,하지만 난 더 이상 성공적으로 이클립스에서 직접 자바 응용 프로그램으로 내 프로젝트를 실행할 수 없습니다 : 나는 /resources 폴더를 가리 키도록 코드를 변경하여이 문제를 해결할 수 있습니다.

리소스를로드하는 데 대한 여러 게시물을 읽었지만 지금까지 도움이 된 것은 없습니다.

이 문제를 해결하고 두 경우 모두 올바르게 작동하는 방법으로 리소스를로드 할 수 있습니까? 아마도 resources 폴더 대신에 JAR 루트에 리소스를 넣도록 Eclipse를 설득하는 것이 효과적 일지 모르지만 이것이 가능한지 확실하지 않습니다.

+1

src/main/resources는 Maven 디렉토리 구조의 일부이지만 Maven을 사용하여 jar 파일을 만들지는 않습니다. 이클립스 내보내기 jar 함수를 사용해야합니까? – Gimby

+0

@Gimby 원격 시스템에서 JAR을 테스트하는 것이 편리하기 때문에 내보내기 기능을 사용하고 있습니다. – w128

+0

"내보내기 → Runnable JAR 파일은 JAR의 루트에있는 resources 폴더 안에 script.rb 리소스를 넣습니다."That 's WRONG !!! 'src/main/resources'의 내용은 항아리의 루트에 있어야합니다. 당신은 maven이 jar 파일을 생성하도록해야만한다. –

답변

1

Class.getResourceAsStream(...)을 사용하면 패키지에 상대적으로로드됩니다. 루트에서로드하려면 Classloader.getResourceAsStream(...)을 사용해야합니다. /이 삭제되었습니다

InputStream resource = this.getClass().getClassloader().getResourceAsStream("script.rb"); 

음표 (src/main/resources가 ecliplse 클래스 패스라고 가정)!

+0

답장을 보내 주셔서 감사합니다.하지만 불행히도이 방법은 이클립스에서 프로젝트를 실행한다. 이전에 exported runnable JAR로 실행할 때와 마찬가지로 실패한다. – w128

+0

@ w128 Maven을 사용하는 경우 Eclipse를 수동으로 내보내지 마십시오. Maven을 사용하여 생성하십시오. –