IntelliJ Idea和JNI:确定DLL是他们需要执行的地方

时间:2013-01-21 16:10:15

标签: java dll intellij-idea java-native-interface

我正在使用项目中的第三方库,它包含两个.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文件相同的目录中?

3 个答案:

答案 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)。 点击“确定”。

请参阅https://www.jetbrains.com/help/idea/2016.3/configuring-module-dependencies-and-libraries.html#d1860048e28的原始说明。

这是我为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()

加载它