2017-11-13 9 views
0

res라는 폴더에서 그래픽 및 사운드 효과를 읽는 프로젝트가 있습니다. 이 폴더는 src 폴더와 동일한 디렉토리 레벨에 있습니다. 리소스 루트로 표시된 입술이 있습니다.IntelliJ IDEA의 JAR 아티팩트에 리소스 폴더를 어떻게 올바르게 포함합니까?

내가 프로젝트 구조의 방법으로 콘텐츠 Directory와 같은 고해상도를 포함하는 내 유물을 구성 -> 유물 -> 추가 (Alt + 삽입) -> JAR

그 다음은, 출력 레이아웃 탭에서 내가 누른 드롭 다운 상자 -> 디렉토리 콘텐트 -> res

프로젝트를 Intellij에서 실행할 때, 리소스를 잘 찾을 수 있습니다. 내가 독립 유물을 빌드 할 때, 다음 항아리를 실행, 그러나

public static final Sfx VOID_SOUND = new Sfx(TinySound.loadSound(new File("res/audio/sfx/void_sound.wav"))); 

는 파일 경로에 내 컴퓨터의 상위 디렉토리를 앞에 붙이는 자원을 찾습니다 : 여기에 내가 리소스에 액세스하는 방법을 보여주는 코드입니다 , 루트까지. 이슈가 적절한 장소에 보이는 곳으로 만들 구성 할 수있는 방법은

/home/user/Demo/res/audio/sfx/void_sound.wav (No such file or directory) 
Error getting resource stream! 

거기 다음은 터미널의 출력 모습입니다? jar 파일 내부에 포함 된 리소스를 원하므로 외부 종속성이없는 독립 실행 형 jar로 작동합니다.

답변

0

저는 리눅스에 익숙하지 않으므로 소금으로 복용하십시오. 하지만 나에게는 권한이없는 곳에서 파일에 액세스하려고하는 것처럼 보입니다. 파일이나 디렉토리를 다른 사용자가 액세스 할 수있는 공유 위치로 옮겨 보았습니까?

+0

내 사용자 계정의 홈 디렉토리에 있으므로 해당 디렉토리에 권한이 있습니다. 내 계정은이 시스템의 루트가 아닌 다른 계정이므로 공유 위치와 가장 가깝습니다. 권한을 가질 수없는 유일한 방법은 루트 전용 권한으로 표시된 디렉토리에있는 경우입니다. – DayTripperID

0

모듈의 Content root 안에있는 resource/source folders의 모든 파일은 artifact build의 아티팩트에 포함되어 있습니다. 제작 된 이슈 컨텐츠를 탐색 할 수 있습니다 (이슈는 출력 디렉토리 필드의 Artifct의 Generat Settings에 지정됨).

파일에 올바른 디렉토리를 지정했는지 확인하십시오. 예 : res 폴더가 모듈의 resource root으로 표시된 경우 이슈의 파일 경로 이름은 res 디렉토리의 하위 폴더 인 audio/sfx/void_sound.wav에서 시작됩니다.

0

이제 왜 작동하지 않는지 이해합니다. JAR 아티팩트에 포함 된 자원은 클래스 경로에 포함되어야하고 getResource()을 사용하여 액세스 할 수 있어야합니다. classpath 외부의 리소스는 파일 경로를 사용하여 액세스해야합니다. 상대 경로를 사용하면 JAR 내부가 아닌 JAR이 시작되는 pwd의 위치로 해석되므로 루트로 다시 확인됩니다. 해결책은 클래스 패스에 리소스를 넣고 getClass().getResource() 또는 getClass().getLoader().getResource()을 사용하여 리소스에 액세스하는 것입니다.