2011-02-17 5 views
0

웹 응용 프로그램에 내장 된 jar 라이브러리를 사용하는 Java 애플릿을 가져 오는 데 문제가 있습니다. 특히 내 애플릿의 단일 jar 파일에 포함 된 jar 파일 안에 패키지화 된 라이브러리에 포함 된 클래스에 대해 NoClassDefFoundError를 얻습니다. 후자의 정규 클래스 (즉, 중첩 된 jar 파일에 포함되지 않은 클래스)는 아무 문제없이 애플릿 실행 프로그램에 의해 배치됩니다.Java 애플릿을 사용하여 단일 jar 파일에 포함 된 jar 라이브러리를 찾으십시오.

여기 내 HTML 코드입니다 :

<applet code="Applet.class" archive="myApplet.jar" width="600" height="600" title="MyApplet"> 

말, 두 개의 추가 jar 파일이있는 MyApplet.jar 내부 : 루트 수준에서 library1.jar 및 library2.jar을. 런처가 액세스 할 수 있도록 액세스 가능하게 만드는 방법은 무엇입니까? library1.jar 및 library2.jar를 아카이브 속성에 추가하려고 시도했지만 작동하지 않았습니다.

답변

0

Java는 다른 jar 파일의 jar 파일을 직접 지원하지 않습니다.

작업 방법을 알고있는 사용자 정의 클래스 로더가 필요합니다. one-jar 프로젝트는 그러한 클래스 로더를 제공하며 개미로 스크립팅 할 수 있습니다. Eclipse를 사용하는 경우 내보내기 -> Runnable jar에는 one-jar 클래스 로더가있는 단일 jar를 직접 작성할 수있는 옵션이 있습니다.

클래스 로더가 메모리에 더 많은 정보를 캐시해야하므로 메모리 사용량이 높아집니다.

+0

답장을 보내 주셔서 감사합니다. 한 항아리가 포함 된 fat-jar 플러그인으로 시도했지만 생성 된 jar 파일이 웹 페이지에로드되지 않았습니다. 심지어 내 주 클래스 (fat jar 파일 내부의 main 서브 디렉토리에있는이 main.jar 파일에 포함 된 것 같습니다)를 찾을 수 없습니다. 필요한 모든 파일을 찾으려면 HTML 애플릿 코드에 무엇을 써야합니까? – Tamori

+0

또한 원할 한 실행기 클래스를 기본 클래스로 제공해야합니다. Java 콘솔을 사용하도록하십시오. –

0

모든 것을 포함하는 하나의 jar를 생성하기 위해 maven shade 플러그인을 사용할 수 있습니다.

1

종속 항아리에서 파일의 압축을 해제하고 항아리에 파일을 포함시킬 수 있습니다. bin, src 및 libs 디렉토리가 있다고 가정 해보십시오.

cd bin 
find ../libs -type f -name \*.jar -exec jar xfv {} \; 
rm -rf bin/META-INF 
cd .. 
jar cfv yourjar.jar -C bin/ . 
관련 문제