繁体   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