2010-07-06 190 views
1

我制作了一个Java Applet,它依赖于某些第三方的libriaries以及通过JNI调用的DLL。这些显然不会安装在客户端计算机上。有没有办法将这些第三方的libriaries和外部DLL打包到我的Applet的JAR中,以便它可以被任何基于Java安装的客户端运行?部署具有第三方依赖关系的Java Web Applet

回答

1

在web应用程序中使用JNI是胃灼热的秘诀,特别是在Windows中。

  • 显然,您不能在WAR文件中部署该DLL,并且可能需要事先由部署人员运行单独的安装程序。
  • 您必须确保java.library.path已正确设置,这通常是由应用程序服务器中的设置完成的,而不是WAR文件中可部署的。
  • 如果您尝试运行该Web应用程序的多个实例,则JNI将该本机类与该库链接的方式将导致类加载器头痛。解决此问题的一种方法是将包含的JAR文件移动到共享类加载器(如Tomcat的公用文件夹)中,但它有其自身的复杂性。
+0

谢谢,认为它不值得头痛。关闭以找到不同的解决方案。 – 2010-07-06 17:49:28

1

反正是有包装这些第三 方libriaries

在Eclipse中,下的Java项目属性(右键单击),我可以做:

Export... => Export as Runnable JAR 

然后我告诉它将我的jar依赖关系打包到那个导出的JAR中。 导出的JAR将包含所有依赖关系。

alt text http://www.ubuntu-pics.de/bild/97131/selection_016_mg6IDm.png

+0

这不会处理支持JNI本机类所需的本机库。 – 2010-07-06 17:42:45

+0

从不这样说,不值得头痛。为了反映这一点,我截断了OP的报价。 – bakkal 2010-07-06 20:18:46

1

我的话题不是专家,但有对所有这些问题工作方案。他们可能会让你头痛,但有些事情只能通过这种方式来完成(我相信你与Entrust CSP的问题就是其中之一)。

您可以从OpenOCES-project查看OpenSign。神奇的事发生在org.openoces.opensign.client.applet.bootstrap中。

我也相信JNLPAppletLauncher解决了同样的问题,但我没有与我的经验。