2011-08-05 5 views
2

Eclipse에 빌드 된 jar 파일 (A.jar)이 jar 파일에 포함 된 다른 jar 파일 (B.jar)에 의존합니다 파일로 저장되며 jarinjarloader를 통해 액세스됩니다. 이것은 그 코드는 속성이 b.JAR가에 포함 된 정보 파일 찾는데 실패다른 jar 파일의 jar 파일에서 특성 파일을 가져 오려고 시도합니다.

InputStream inStream = <Class>.getClassLoader().getResourceAsStream(propFile); 

를 호출 할 때, 그 jar 파일 내부에 자바 코드에 액세스하기 위해 노력하고 있지만. 이 코드는 Eclipse에서 실행될 때 작동하므로 정확한 특성 파일이 있다는 것을 알고 있습니다.

A.jar을 압축 해제 한 다음 B.jar을 압축 해제 한 다음 결합 된 파일을 압축하려고 시도했지만 작동하지 않습니다. Manifest 파일을 살펴보면 Main-Class는 org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader입니다.

Manifest 파일을 변경할 수 있습니까 (예 : Rsrc-Class-Path에 뭔가 추가). 이게 효과가 있니? Rsrc-Class-Path는 이미 "./"을 포함하고 있지만, 분명히 속성 로더가 내 속성 파일을 볼 수 없습니다.

TIA,

그렉

+0

아, IDE에서 빌드를 관리 할 때의 위험. jarinjarloader를 사용해야합니까? – Paul

+0

약 15 개의 다른 jar 파일을 포함하는 실행 가능한 jar를 빌드하는 또 다른 방법을 말해 줄 수 있다면, 정말 기쁩니다. 없으면 jarinjarloader를 사용해야합니다. –

+0

하나의 항아리를 제공해야합니까? 그렇다면 C. Ramseyer의 대답은 좋은 것입니다. 내 의견도 참조하십시오. – Paul

답변

1

이클립스 내가 놓친 설정이 밝혀졌습니다. 을 내보낼 때 "Runnable JAR File"을 선택하면 "생성 된 JAR에 필요한 라이브러리 추출" "을 선택할 수 있습니다. 이것은 약간의 라이선스 문제 (병합중인 JAR에 따라 다름)를 제공 할 수도 있지만, 제 경우에는 매력처럼 작동하여 단일 (더 작게, 여러 가지 jar 파일 중 많은 중복이 있었기 때문에)했습니다. 되었습니다 포함) 항아리 실제로 작동합니다.

2

또한 주위에 중첩 된 항아리 작업 권하고 싶습니다. 나는 보통 단지에 압축을 푼 모든 라이브러리를 하나 개의 단지를 구축하는 내 build.xml 파일에서이 작업을 수행 :

<target name="fatjar" depends="compile"> 
    <jar destfile="${isamjar}" filesetmanifest="mergewithoutmain"> 
      <manifest> 
        <attribute name="Main-Class" value="com.xyz.Main"/> 
        <attribute name="Class-Path" value="."/> 
      </manifest> 
      <fileset dir="./bin"/> 
      <fileset dir="." includes="src/**"/> 
      <zipfileset excludes="META-INF/*.SF" src="${l}/derby.jar"/> 
      <zipfileset excludes="META-INF/*.SF" src="${l}/jconn3.jar"/> 
      <zipfileset excludes="META-INF/*.SF" src="${l}/log4j-1.2.9.jar"/> 
      <zipfileset excludes="META-INF/*.SF" src="${l}/${jar4j}"/> 
    </jar> 

+0

오픈 소스 프로젝트 인 "One-JAR"(http://one-jar.sourceforge.net/)도 있습니다. "... 아카이브 내의 jar에서 클래스와 리소스를로드하는 방법을 알고있는 커스텀 클래스 로더를 제공합니다 파일 시스템의 항아리가 아닌. " – Paul

관련 문제