3

我在一个项目中使用第三方库,它包括两个 .dll 文件和一个 .jar fie 以提供 JNI Wrapper。可以使用以下命令调用 .jar 文件中包含的第三方供应商的测试项目:

java -cp product.jar com.company.samples.product.Test

只要 .jar 和两个 dll 都在同一个目录中,这就可以正常工作。

在我的项目中,我将jar文件和dll放在同一个目录中,然后在IntelliJ Idea中将jar文件作为库引用,但这会导致库无法找到dll。有没有一种方法可以告诉 Idea dll 的位置,以便在执行期间将它们输出到与 jar 文件相同的目录中?

4

3 回答 3

8

在 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 的集成安全性的方式。

于 2017-03-03T06:56:23.740 回答
4

您可以设置java.library.path系统属性以指出 Java 在哪里查找本机库。

-Djava.library.path=path/to/dll

请注意,根据这个答案,它是一个只读字段,在您有机会在代码中更改它之前检查它,但它们提供了一种解决方法。一般来说,与启动时相比,我从来不需要在运行时设置值。

于 2013-01-21T16:43:38.743 回答
2

DLL 是从路径变量加载的。您可以在启动应用程序时更改该值。

或者,您可以构建 dll 的路径(再次使用环境变量/系统变量)并通过System.load()加载它

于 2013-01-21T16:37:27.117 回答