이클립스와 jar에서 모두 작동하는 방법으로 리소스를로드하는 방법을 이해하는 데 문제가 있습니다.Java classLoader 및 getResourceAsStream
내 프로젝트에는 하나의 소스 파일 인 src
이 있습니다. 그 아래에서 리소스 (이미지, 오디오 ..)를 가져 오는 새로운 패키지를 만들었습니다. 리소스는 src/resources
이고 src/com/Mainclass.java
입니다.
이제 다른 답변에서 알 수 있듯이 .class.getResource(); 클래스의 디렉토리를 검색하기 시작합니다. Eclipse에서 jar 파일을 추출 할 때 클래스의 디렉토리를 제외하고. 즉 ,
MainClass.class.getResourceAsStream("/resources/img.png")
는 이클립스에 작동합니다.
리소스가 메인 클래스와 동일한 경로에 있지 않기 때문에 왜 작동하는지조차 알지 못합니다. 나는 대신 우리가 com에서 갈 것이므로 ../resources/img.png가 작동 할 것을 기대할 것입니다. ~ src/, 리소스는 다음과 같습니다.
<root of the jar>/com/mainclass.java
<root of the jar>/src/resources
을 그리고 그것은 작동하지 않습니다
아직도 한 번 나는 분리 내가 그 안에 찾을 항아리로 추출합니다.
더 쉬운 해결책은 다음과 같습니다. MainClass.class.getResourceAsStream ("/ resources/img.png")이로드되는 정확한 디렉토리를 어떻게 알 수 있습니까? 모든 단일 하위 폴더에/resources /를 넣으려고했지만 여전히 작동하지 않습니다. IT는 리소스 폴더가 항아리와 같은 폴더에 있지만 항아리 자체가 아닌 경우 이클립스 외부에서 작동합니다. 프로젝트는 메이븐 자바 프로젝트입니다, 내가 외부 libs가 없다
:
여기 내 빌드 경로입니다.
:
그래서, 당신의 코드는 실제로처럼 보일 것이다. Eclipse에서 사용되는 소스/컴파일 된 레이아웃은 Eclipse 방식 (많이)과 Maven 방식 (약간)을 혼합합니다. – davidxxx
전체적으로 이해하려면 https://maven.apache.org/guides/getting-started/를 읽어보십시오. 리소스 요구 사항은 https://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory를 참조하십시오.htac – davidxxx