簡體   English   中英

帶有bouncycastle庫的jar文件:NoClassDefFoundError

[英]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的類路徑中,您可以執行以下任一操作:

  1. 解壓縮庫JAR,然后將類文件打包到您自己的JAR中
  2. 將庫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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM