Java System.loadLibrary依赖项

Jef*_*rey 6 java dll native

我使用的第三方jar是尝试使用System.loadLibrary加载本机库.我认为正在发生的是其中一个正在加载的库依赖于另一个本机库.在这种情况下,指向-Djava.library.path无法正常工作.来自应用程序站点的指令将dll放在jre/bin目录中,但我认为这是一个非常糟糕的主意(特别是在尝试部署到客户端站点时).

所以,这个问题确实是两个部分.

  1. 如果本机lib尝试加载另一个-Djava.library.path不起作用的本机库,这是否有意义?

  2. 解决这个问题有一个很好的解决方案吗?我想我可以在所有dll上显式调用System.loadLibrary(我甚至不确定这是否可行),但是我需要确保以正确的顺序调用它们,否则我会遇到同样的问题.

编辑:我认为这是有意义的,它发生了,我到目前为止读到的最好的解决方案是使用依赖沃克来计算它,然后以相反的顺序加载它们......但我愿意接受更好的建议. ..

谢谢,杰夫

And*_*mas 4

是的,本机库不使用 Java 属性 -Djava.library.path 链接到其他本机库是有道理的。

一些可能的方法:

  • 第三方jar固定加载自己的依赖,依赖java.library.path。
  • 您的代码以反向拓扑排序加载第三方 jar 所需的 DLL。但是,这会使您的代码指定第三方 jar 的依赖项。这些依赖关系可能会改变。
  • 您使用特定于操作系统的 DLL 搜索路径(例如,在 Unix/Linux/Mac 上使用 LD_LIBRARY_PATH,或在 Windows 上使用 PATH)。但是,这可能需要启动脚本。