我有一个NetBeans平台应用程序,其中有2个模块具有相同本机库的不同版本。
我在每个模块下的release / module / lib文件夹中添加了本机库。 [根据http://wiki.netbeans.org/DevFaqWrapperModules部分:如何在我的库包装模块中包含本机库( .so或 .dll)?]
但问题是在应用程序的最终构建生成期间,本机库被复制到build \ cluster \ modules \ lib文件夹。即只有一个版本的本机库存在于lib文件夹中,因为两个版本具有相同的名称。现在我的问题是我可以在Netbeans中特别提到jar(版本1)应该使用本机lib(ver1)和jar(版本2)应该引用本机lib(版本2)。
答案 0 :(得分:1)
您可以通过两种方式加载本机库文件(.dll / Windows或.so / Linux):
1)通过提供完整路径加载文件:
System.load("my/full/path/native.dll");
2)如果您的本机文件位于Java库路径中:
System.loadLibrary("native");
请注意,在第二种情况下,您只需提供原生文件的名称(不带扩展名)。
默认Java库路径取决于操作系统:
在Windows上,它映射到PATH
在Linux上,它映射到LD_LIBRARY_PATH
在OS X上,它映射到DYLD_LIBRARY_PATH
如果要设置自己的Java库路径:
try {
System.setProperty("java.library.path","YOUR/PATH");
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
} catch (Exception ex) {
System.out.println("Failed to set Java Library Path: " + ex.getMessage);
}