in native/src/main/java/org/mvndaemon/mvnd/nativ/MvndNativeLoader.java [260:329]
private static void loadMvndNativeLibrary() throws Exception {
if (loaded) {
return;
}
List<String> triedPaths = new LinkedList<>();
// Try loading library from library.mvndnative.path library path */
String mvndnativeNativeLibraryPath = System.getProperty("library.mvndnative.path");
String mvndnativeNativeLibraryName = System.getProperty("library.mvndnative.name");
if (mvndnativeNativeLibraryName == null) {
mvndnativeNativeLibraryName = System.mapLibraryName("mvndnative");
assert mvndnativeNativeLibraryName != null;
if (mvndnativeNativeLibraryName.endsWith(".dylib")) {
mvndnativeNativeLibraryName = mvndnativeNativeLibraryName.replace(".dylib", ".jnilib");
}
}
if (mvndnativeNativeLibraryPath != null) {
String withOs = mvndnativeNativeLibraryPath + "/" + OSInfo.getNativeLibFolderPathForCurrentOS();
if (loadNativeLibrary(new File(withOs, mvndnativeNativeLibraryName))) {
loaded = true;
return;
} else {
triedPaths.add(withOs);
}
if (loadNativeLibrary(new File(mvndnativeNativeLibraryPath, mvndnativeNativeLibraryName))) {
loaded = true;
return;
} else {
triedPaths.add(mvndnativeNativeLibraryPath);
}
}
// Load the os-dependent library from the jar file
String packagePath = MvndNativeLoader.class.getPackage().getName().replace('.', '/');
mvndnativeNativeLibraryPath = String.format("/%s/%s", packagePath, OSInfo.getNativeLibFolderPathForCurrentOS());
boolean hasNativeLib = hasResource(mvndnativeNativeLibraryPath + "/" + mvndnativeNativeLibraryName);
if (hasNativeLib) {
// temporary library folder
String tempFolder = getTempDir().getAbsolutePath();
// Try extracting the library from jar
if (extractAndLoadLibraryFile(mvndnativeNativeLibraryPath, mvndnativeNativeLibraryName, tempFolder)) {
loaded = true;
return;
} else {
triedPaths.add(mvndnativeNativeLibraryPath);
}
}
// As a last resort try from java.library.path
String javaLibraryPath = System.getProperty("java.library.path", "");
for (String ldPath : javaLibraryPath.split(File.pathSeparator)) {
if (ldPath.isEmpty()) {
continue;
}
if (loadNativeLibrary(new File(ldPath, mvndnativeNativeLibraryName))) {
loaded = true;
return;
} else {
triedPaths.add(ldPath);
}
}
throw new Exception(String.format(
"No native library found for os.name=%s, os.arch=%s, paths=[%s]",
OSInfo.getOSName(), OSInfo.getArchName(), join(triedPaths, File.pathSeparator)));
}