我正在使用项目中的第三方库,它包含两个.dll文件和一个.jar fie来提供JNI Wrapper。可以使用以下命令调用.jar文件中包含的第三方供应商的测试项目:
java -cp product.jar com.company.samples.product.Test
只要.jar和两个dll位于同一目录中,这样就可以了。
在我的项目中,我将jar文件和dll放在同一目录中,然后将jar文件作为IntelliJ Idea中的库引用,但这导致库无法找到dll。有没有办法可以告诉Idea在哪里dll是如此,它可以在执行期间将它们输出到与jar文件相同的目录中?
答案 0 :(得分:6)
在IntelliJ中,如果要添加 .dll 的目录,请执行以下操作:
1)打开“项目结构”对话框(例如 Ctrl + Shift + Alt + S )。
2)在对话框的左侧窗格中,选择模块。
3)在右侧窗格中,选择感兴趣的模块。
4)在对话框的右侧,在Module页面上,选择Dependencies选项卡。
5)在Dependencies选项卡上,单击“+”并选择Jars或目录。
6)在打开的对话框中,选择必要的文件和文件夹。 这些可能包含此类文件的单个.class和.java文件,目录和存档(.jar和.zip)以及包含Java本机库的目录( .dll ,。so或.jnilib)。 点击“确定”。
这是我为JDBC驱动程序添加 .dll ( sql_auth.dll )以使用MS SQL的集成安全性的方法。
答案 1 :(得分:4)
您可以设置java.library.path
系统属性以指出Java在哪里查找本机库。
-Djava.library.path=path/to/dll
请注意,根据this answer,它是一个只读字段,在您有机会在代码中进行更改之前会进行检查,但它们提供了一种解决方法。通常,与启动时相比,我从未需要在运行时设置值。
答案 2 :(得分:2)
DLL从path variable加载。您可以在启动应用程序时更改该值。
或者,您可以构建dll的路径(再次使用环境变量/系统变量)并通过System.load()
加载它