나는 외부 라이브러리에 의존하고 template.pdf
이라는 리소스를 포함하는 자바 프로젝트를 가지고있다. 라이브러리는 내 작업 영역 외부의 폴더에 있으며 Project -> Properties -> Build Path -> Libraries -> Add External Jar
을 사용하여 프로젝트에서 참조합니다. 리소스 파일은 현재 내 작업 공간의 bin/
폴더에 있으므로 PDFProject.class.getResourceAsStream("/template.pdf")
을 사용하여 액세스 할 수 있습니다.이 파일은 아래의 방법 1을 사용하여 JAR 파일을 내보내는 것으로 가정하고 Eclipse 및 JAR 파일에서 모두 작동합니다.JAR에 자원과 종속성을 포함시키는 방법은 무엇입니까?
내 목표는 리소스와 의존성을 모두 포함하는 JAR로 프로젝트를 내보내는 동시에 리소스 액세스에 사용되는 코드를 변경하지 않고 Eclipse와 JAR 내부에서 코드를 실행할 수있게하는 것이다. 또는 파일의 사본을 여러 개 유지해야하는 경우. 지금까지 나는 시도했다 :
- 가 알렸던
Export all output folders for checked projects
상자Export -> JAR file
를 사용하여 내보내기. 그러면 리소스 파일이 포함 된 JAR이 내보내지고 이클립스와 JAR의 동일한 경로 ("/template.pdf"
)를 사용하여 리소스에 액세스 할 수 있지만 JAR 내부의 종속성 패키지 옵션은 제공되지 않습니다. [Extract/Package] required libraries into generated JAR
옵션이 선택된Export -> Runnable JAR file
을 사용하여 내보내기. 이렇게하면 내부의 종속 항목과 함께 jar 파일이 내보내 지지만 리소스 파일은 제외됩니다.- 리소스 파일을 프로젝트의
src/
디렉터리로 이동 한 다음 위의 방법 2를 사용하여 내 보냅니다. 이것은 정확하게 자원과 의존성을 JAR에 패키징하지만, 코드는"/template.pdf"
이 더 이상 class-path에 없으므로 수정없이 Eclipse에서 실행되지 않습니다.
은 내가 수동으로 수출 후 JAR에 자원을 배치하거나 bin/
및 src/
모두에서 리소스 파일의 복사본을 유지하거나 직접 내 프로젝트에 라이브러리의 소스를 복사 할 수 있음을 인식하지만, 이러한 솔루션은 비효율적 인 것 같습니다 일반적인 관행으로. 대부분의 검색에서 Ant 또는 Maven과 같은 빌드 도구가 허용 가능한 솔루션을 제공 할 수 있음을 나타내는 것으로 보이지만 가능한 경우이 시점에서 학습 곡선을 다루지 않는 것이 좋습니다. 기본 Eclipse 내보내기 옵션과 폴더 계층 구조 만 사용하여 위에 지정된대로 JAR 파일을 만드는 방법이 있습니까?
편집 : 아래의 Thorbjørn Ravn Andersen의 의견은 리소스 파일을 프로젝트에 추가하는 방법과 관련하여 내 큰 실수를 발견하는 데 도움이되었습니다. Eclipse의 가져 오기 기능을 사용하는 대신 필자는 OS를 통해 파일을 원본 폴더에 수동으로 복사 한 다음 오른쪽 클릭 메뉴에서 새로 고침을 사용하여 Eclipse의 패키지 탐색기를 업데이트했습니다. 나는이 프로젝트가 필요한 업데이트를 수행 할 것이라고 잘못 생각했다. 그러나 나중에 파일을 출력 폴더에 반영하도록 프로젝트를 정리해야했다. (또는 가져 오기 기능을 사용하여 첫 번째 파일을 추가했다. 장소).
원본 폴더에있는 리소스 파일의 복사본 만 유지하면되므로 문제가 해결되지만 디스크에 파일의 복사본이 여러 개 생성됩니다. 내 작은 프로젝트에 대해서는 문제가되지 않습니다. 그러나 많은 리소스 파일이있는 대규모 프로젝트의 경우 중복 파일에 많은 디스크 사용량이 발생할 수 있습니다. 분명히 중복없이 비슷한 결과를 얻을 수있는 방법이 있어야만합니까?
당신이 Thorbjørn Ravn 안데르센 @ 프로젝트 –
를 청소하지 않는 경우 그래서 현재 jar 파일이 사라 - 내가 청소하면 파일이 사라지고 없음 항아리,하지만 빈에서 template.pdf 파일을/ – Houser
새 원본 폴더를 만들고 template.pdf를 그 안에 복사하십시오. –