[英]jar file with bouncycastle libraries: NoClassDefFoundError
我很難從網絡瀏覽器中獲取我的jar文件。 當我從Eclipse運行applet時一切正常,但是從瀏覽器中我得到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存檔的org / bouncycastle / openpgp /目錄中,但是......我的JAR包含來自bouncycastle的庫和我的applet類。 這里的架構:
META-INF
-MANIFEST.MF
-CNSAPPLE.SF
-CNSAPPLE.RSA
lib
-bcprov-jdk16-146.jar
-bcpg-jdk16-146.jar
com
-CNSApplet.class
清單文件定義了類路徑和主類,如下所示:
類路徑:lib / bcpg-jdk16-146.jar lib / bcprov-jdk16-146.jar
Main-Class:com.CNSApplet
和調用applet的html代碼:
<applet code="com.CNSApplet.class" width="800" height="300" archive="cnsapplet.jar">
當然,html文件位於cnsapplet jar文件的同一目錄中。
Java默認的ClassLoader不會查找JAR中嵌入的JAR文件。 這意味着為了將庫包含在JAR的類路徑中,您可以執行以下任一操作:
JAR文件中的Class-Path清單條目指向文件系統(相對於JAR文件),而不指向嵌入在JAR文件中的文件。
解壓縮BC jar並將其內容添加到JAR文件中,或者將BC jar作為單獨的下載提供。 您可以在applet標記的archive屬性中指定多個JAR文件,方法是用逗號分隔它們。
由於BC jar是簽名的,如果將內容重新打包到您自己的JAR文件中,簽名就會丟失,最好的解決方案可能是將它們作為單獨的文件提供,並將它們列在archive屬性中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.