java - 带有 bouncycaSTLe 库的 jar 文件 : NoClassDefFoundError

标签 java bouncycastle executable-jar japplet

我正在努力让我的 jar 文件在 Web 浏览器中运行。 当我从 Eclipse 运行小程序时,一切正常,但从浏览器中我得到一个 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 的库和我的小程序类。这是它的架构:

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

list 文件定义类路径和主类如下:

Class-Path: lib/bcpg-jdk16-146.jar lib/bcprov-jdk16-146.jar

Main-Class: com.CNSApplet

以及调用小程序的html代码:

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

当然html文件和cnsapplet jar文件在同一个目录下。

我尝试用 sun method 制作我的 jar 还有这个other one .

最佳答案

Java 默认的 ClassLoader 不会查找 JAR 中嵌入的 JAR 文件。这意味着为了将库包含在 JAR 的类路径中,您可以执行以下任一操作:

  1. 解压库 JAR,然后将类文件打包到您自己的 JAR 中
  2. 将库 JAR 放在 JAR 之外,然后使用 list 文件引用它们(就像您所做的那样)。

关于java - 带有 bouncycaSTLe 库的 jar 文件 : NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8309818/

相关文章:

java - 注入(inject)的 EJB 引用在 ViewScoped JSF Bean 中丢失

java - 考虑在您的配置中定义类型为 'org.springframework.jdbc.core.JdbcTemplate' 的 bean

java - 我 block 填充,仍然得到 "data not block size aligned"

java - 使用 hadoop Map Reduce 的自定义输出格式时未找到类异常

Java- 导出到 jar- I/O 问题

java - 如何删除字符串中出现的一个字符?

java - 如何获取自定义ListView中EditText的所有值

java - 使用 rsa key 解密字符串

c# - 以 DER 格式导出 RSA 公钥并解密数据

java - 是否有一个 .jar 本身的 java ide?