Native.loadLibrary() returns null 当项目是 gradle 依赖项时

Native.loadLibrary() returns null when project is a gradle dependency

实施了一个 java 驱动程序项目,该项目在 JNA 的帮助下利用了一些 .dll 文件。当我构建和 运行 时,它作为一个项目工作得很好。但是,当此驱动程序项目受到干扰并成为另一个更大项目的依赖项时,我无法加载 .dll 文件。

我正在使用 Native.loadLibrary(LIBRARY_NAME, MY_INTERFACE.class) 语法在驱动程序项目中加载库。此行成功将我的库加载到驱动程序项目中,但 returns null 当它依赖于另一个项目时。如何调试并找出问题所在?

要重现此行为:

OS: Windows 10 IDE: Intellij Community 2018.2 Java: 1.8.0_191 driver project: https://github.com/ClearControl/GS16AO64c parent project: https://github.com/AhmetCanSolak/clearcontrol

我终于解决了我的问题。 JNA 的 Native.loadLibrary() 无法从 jar 访问任何非 class 元素。我将资源 .dll 文件复制到临时文件中并首先加载它们:

System.load(tmpFile.getAbsolutePath());

然后使用Native.loadLibrary()。这样就可以了。