打包JNI库

时间:2010-09-27 09:32:37

标签: java windows java-native-interface

我使用Java开发应用程序,我有一个我需要能够使用的库。该库有一个jar文件和一个dll文件。目前我已将dll文件放入我的系统文件夹并将jar链接到IDE。我的问题是,我想将所有内容打包到一个可执行的jar中,用户可以在其中运行(可能使用webstart)。

如何在不让用户将dll复制到系统文件夹中的情况下生成此jar文件?有没有办法将所有内容放在一个档案中?

2 个答案:

答案 0 :(得分:3)

您可以将.dll打包到.jar中,但物理.dll文件必须先从那里解压缩才能加载,因为Windows处理.dll的方式。无法直接从.dll内加载.jar

This question似乎包含适当的实现。但请注意,它有点容易出错:如果程序没有将权限写入提取.dll的任何地方,那么你就处于一种奇怪的境地;您无法加载.dll,因为您无权先写入它。

更强大的解决方案是使用某种安装程序将整个应用程序安装到目录层次结构中,例如

/whatEver/myApp/                 (The working directory of the app.)
/whatEver/myApp/myApp.jar        (The main app.)
/whatEver/myApp/lib/library.dll  (The JNI library.)

然后,您只需使用相对于工作目录的路径

即可加载dll
System.loadLibrary("lib/library.dll");

为了更加健壮,您需要确保在尝试加载库之前运行具有适当位数的JVM。一个鲜为人知的事实是,64位虚拟机无法加载32位库,反之亦然。请参阅this问题。

答案 1 :(得分:1)

您可能需要查看此内容:http://one-jar.sourceforge.net/由于您未提供有关构建过程的任何信息,因此我无法提供更多帮助。