2010-01-15 3 views
7

일식에서 우리의 프로젝트는 약을 보여줍니다 다음 폴더 포함 : 우리의 프로젝트에서이클립스 : 수출 .JAR 및 리소스 파일 (ANT)

application 
    - src 
    - JRE System Library [1.6] 
    - Referenced Libraries 
    - lib 
    - rsc 

을, 우리는 파일> 내보내기를 사용하고 싶습니다 ...> 실행 JAR

우리는 application.jar을 실행하려면 application.jar과 같은 위치에 rsc/폴더를 복사해야합니다.

rsc /에는 다른 부품을 분리 할 수있는 다른 폴더가 있습니다.

strUrl = "file:rsc/properties/Constants.properties"; 
url = new URL(strUrl); 
ImageIcon icon = new ImageIcon(url); 

내가 />하는 경로> 소스 폴더로 사용할 빌드 RSC에 마우스 오른쪽 단추로 수 는 기본적으로, 우리는 코드를 사용하여 조각로드 (물론 약간 변경을하지만, 경로 스타일은 정확).

eclipse가 자동으로 rsc 폴더를 bin/-folder로 복사하지 않기 때문에 이것은 작동하지 않습니다. 그리고 터미널에서 더 이상 실행할 수 없습니다. (병에 포장되지 않았습니다.)

EDIT :이 문제를 제대로 처리 할 수없는 이유는 무엇입니까? "중첩 된"출력 폴더에 문제가있는 이유는 무엇입니까? 빌드 경로 대화 상자의 소스 탭에서 bin/rsc /로 설정된 출력 폴더와 함께 rsc/-folder를 쉽게 추가 할 수 있지만 중첩 폴더를 넣을 수있는 것 같지 않습니다.


편집 2 : 이제 나는 개미로 물건을 구축 할 수있는 XML 파일을 만들 수 있었고, 어떻게 든 바로 항아리에 RSC-폴더를 포함 할 수 있었다. 동일한 오류로 인해 실행되지 않습니다. 리소스 경로가 JAR에 있는지 여부를 확인해야합니까? JAR 파일의 내용은 이제 다음과 같다 :

META-INF/ 
META-INF/MANIFEST.MF 
configurator/ 
controller/ 
editor/ 
gui/ 
logic/ 
networking/ 
rsc/ 
rsc/gamesettings/ 
rsc/levels/ 
rsc/pics/ 
rsc/properties/ 
util/ 

하지만 자바는 아직도 날 미워하고 약 100 라인의 스택 트레이스와 java.io.FileNotFoundException: rsc/properties/Constants.properties가 발생합니다.


누구나 어떻게해야할까요? thx & 안부

답변

15

당신이 소스 폴더로 rsc을 표시하면 Eclipse는 그 내용을 출력 디렉토리에 복사합니다. 또는 출력에 리소스를 그룹화하려면 rscsrc 아래로 옮길 수 있습니다.

그런 다음 Class.getResource("/properties/Constants.properties") 또는 Class.getResource("/rsc/properties/Constants.properties")을 사용할 수 있으며 앱이 jar로 패키지되어 있거나 소스에서 실행 중인지 여부에 관계없이 작동합니다.

참고로, file: 프로토콜은 jar 파일 내의 파일에 액세스하기 위해 일반 파일에서만 작동하며 new URL("jar:file:app.jar!/rsc/properties/Constants.properties")과 같은 것을 사용해야합니다.

+0

예. 이것은 해결책 이었지만 이클립스에서 src-folder로 rsc /를 표시하는 것은 그 일을하지 않습니다. 다른 학생이 저를 똑같은 해결책으로 이끌었습니다. 문제는 Class.getResource ("..."), 경로 앞에'/'를 사용해야한다는 것이 었습니다. thx and regards – Atmocreations

+0

죄송합니다.'Class # getResource()'는 무엇을 의미합니까? 'Class' 클래스에는 정적 메서드가 없습니다. – m0skit0

+0

@ m0skit0이 방법은 정적이 아닙니다. 혼란스러워서 죄송합니다. –

2

이런 종류의 사용을 위해, 나는 Maven을 사용하여 자동으로 병을 만들 때 사용합니다. 심지어 an Eclipse plugin이 있습니다.

Ant을 사용할 수도 있습니다.

+0

thx, 나는 이런 종류의 도구가 있다는 것을 알고 있습니다. 하지만 나는 그들과 어떤 경험이 없으며 내 생각에 이클립스가 실행 가능한 jar 파일을 생성하는 도구를 제공한다면 수정없이 다른 폴더를 jar 파일에 간단하게 추가 할 수 있어야한다. 귀하의 답변은 – Atmocreations

4

시도해 볼 수 있습니다. Java 빌드 경로 대화 상자에서 라이브러리 탭으로 이동하여 "클래스 폴더 추가 ..."를 선택하십시오. 클래스 폴더 선택 대화 상자에서 rsc을 선택하십시오. rsc 디렉토리의 내용이 이제 실행 가능 jar 파일에 포함됩니다.

(당신은 단지 오른쪽에있는 디렉토리 구조를 만들기 위해 RSC 아래에 새 하위 디렉토리를 추가 할 수 있도록 자체는 포함되지 않을 것이다 RSC를 참고.)

+0

입니다. 그래, 그게 효과가있다. 하지만 문제점은 로컬 실행 (jar 파일 생성없이)이 더 이상 작동하지 않기 때문에이 객체들을 rsc/rsc /로 옮길 수 없다는 것입니다 ... – Atmocreations

1

을 나는 귀하의 경우, 수동으로 보통 이렇게 jar -uf foo.jar rsc 모든 리소스가 포함되어 있습니다. 당신은 스크립트를 작성하거나 편집이 하나 개 항아리에 모두가에서 말하는 것처럼 개미

1

에서이 작업을 수행 할 수 있습니다,이 작업을해야합니다 :

String path = "rsc/img/img.gif"; 
URL url = this.getClass().getResource(path); 
ImageIcon icon = new ImageIcon(url); 
+0

응답 해 주셔서 감사합니다. 나는 "this.getClass()"가 src/util/ 에 있습니다. 시도 할 것입니다. – Atmocreations