private static void loadMvndNativeLibrary()

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)));
    }