将包含dll的目录添加为gradle作为路径?

时间:2017-11-08 17:36:43

标签: java gradle dll jar

我已经获得了一个调用.dll在项目中使用的.jar。

如果我执行以下操作,我可以编译并运行没有问题:

  • 将包含.dll的文件夹添加到Path环境varibale(Windows 10)。
  • 将.jar添加为我的gradle项目的依赖项。

这样API就可以了。

当我将生成的jar移动到另一台计算机时,虽然我将它包含在jar中,但它无法找到dll,因此该软件无效。

如何告诉生成的jar它需要的dll是什么?

我觉得他们发送给我的.jar只是调用了dll的函数,并假设你将目录添加到路径变量中。有没有办法让这项工作无需将路径配置更改为每个PC我移动jar?

我已经尝试过这里发布的答案(而且它们不起作用):

1 个答案:

答案 0 :(得分:1)

问题是jar加载dll的方式。通常它只调用System.loadLibrary(<libname>),它希望本机库位于库搜索路径中。

如果要从其他地方加载它,则必须将DLL从JAR中提取到例如:临时目录或其他地方及其使用的负载

System.load(<absolute path to the dll file>);

注意:如果无法更改JAR中的类,则可以在执行JAR代码之前加载的第二个类中调用System.load(..)。 AFAIR库只能由Java加载一次,因此如果已经加载了同名的dll,则只会忽略对原始JAR中System.loadLibrary()的调用。