2011-11-29 2 views
3

웹 브라우저에서 jar 파일을 작동 시키는데 어려움을 겪고 있습니다. 나는 이클립스 모두에서 애플릿이 OK이지만, 브라우저에서 나는 NoClassDefFoundError를 얻을 실행하면 :bouncycastle 라이브러리가있는 jar 파일 : NoClassDefFoundError

Exception: java.lang.RuntimeException: java.lang.NoClassDefFoundError: org/bouncycastle/openpgp/PGPException 
java.lang.RuntimeException: java.lang.NoClassDefFoundError: org/bouncycastle/openpgp/PGPException 
at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3116) 
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1498) 
at java.lang.Thread.run(Thread.java:662) 

PGPException는 bcpg-jdk16-146.jar 아카이브의 조직/bouncycastle/OpenPGP를/디렉토리에 하지만 ... My JAR에는 bouncycastle 및 my applet 클래스의 라이브러리가 모두 포함되어 있습니다.

클래스 경로 : lib 디렉토리/bcpg-jdk16-146.jar lib 디렉토리/bcprov - jdk16를 여기에 자사의 아키텍처 : 그것은 다음과 같이

META-INF 
    -MANIFEST.MF 
    -CNSAPPLE.SF 
    -CNSAPPLE.RSA 
lib 
    -bcprov-jdk16-146.jar 
    -bcpg-jdk16-146.jar 
com 
    -CNSApplet.class 

매니페스트 파일은 클래스 경로와 주요 클래스를 정의 -146.jar

메인 클래스 : com.CNSApplet

그리고 애플릿을 호출하는 HTML 코드 :

<applet code="com.CNSApplet.class" width="800" height="300" archive="cnsapplet.jar"> 

물론 HTML 파일은 cnsapplet jar 파일과 동일한 디렉토리에 있습니다.

나는 sun methodother one 내 항아리를 만들기 위해 노력했습니다.

답변

1

Java 기본 ClassLoader는 JAR에 포함 된 JAR 파일을 찾지 않습니다. 밖으로 라이브러리 JAR 파일을 남겨주세요

  1. 의 포장을 풀고 라이브러리 JAR가 다음 자신의 JAR
  2. 에 클래스 파일을 팩 : 그것은 당신의 JAR의 클래스 경로에 라이브러리를 포함하기 위해 다음 중 하나를 수행 할 수 있다는 것을 의미한다 JAR 파일을 만들고 manifest 파일을 사용하여 JAR 파일을 참조하십시오.
+0

나는이 두 가지 솔루션을 모두 시도했지만 항상 같은 예외가 발생합니다. 나는 또한 BC 라이브러리와 관련한 코드를 삭제하려고 노력했다. 그러나 브라우저가 항아리를 검색 할 때 BC 라이브러리가있는 이전 항아리와 같습니다. – renard

+1

캐싱 문제가 발생합니다. 대부분의 브라우저에서 JAR 파일을 다시 다운로드하지 않아도되므로 테스트하기 전에 브라우저 캐시를 지워야합니다. – Kraylog

+0

그건 문제는 아니었지만 이제는 작동합니다! 고마워, 나는 다음 번에 이것을 염두에 두겠다. – renard

0

JAR 파일의 클래스 경로 매니페스트 항목은 파일 시스템을 가리키며 (JAR 파일과 관련됨) JAR 파일 내에 포함 된 파일이 아닙니다.

하나는 BC 단지 포장을 풀고 당신의 JAR 파일에 콘텐츠를 추가하거나 별도의 다운로드로 BC 단지를 제공합니다. 애플릿 태그의 archive 속성에 하나 이상의 JAR 파일을 쉼표로 구분하여 지정할 수 있습니다.

자신의 JAR 파일에 내용을 다시 포장하면 BC jar에 서명하고 서명을 잃어 버리게되므로 최상의 해결책은 개별 파일로 제공하고 보관 특성에 나열하는 것입니다.