无法执行 ortools 项目的 jar,Loader.loadNativeLibraries() 错误

Can not execute jar of ortools project, Loader.loadNativeLibraries() errors

mvn install后生成jar。不能在 windows.

上 Loader.loadNativeLibraries()

ortools的版本是9.0.9048。我在 windows 上用过它。 我将以下两个 jar 添加到项目中,并按照 link 所述添加它们。

那么这两个jar就在IDEA的这里

pom 文件如下:

然后我就可以在IDEA中正常运行程序了。但是当我 mvn install 生成 jar 文件并通过 'java -jar jarfile.jar' 运行 jar 时,它会出错:

上面写着java.nio.file.NoSuchFileException:/BOOT-INF/lib/ortools-win32-9.0.jar!/win32-x86-64/,但是我用winrar打开jar的时候是存在的

有谁知道原因吗?

官方神器是:
群组:com.google.ortools,工件:ortools-java

https://search.maven.org/artifact/com.google.ortools/ortools-java/9.0.9048/jar

Mac 版本的示例。

实际上在 Java 中使用 ortools 时需要两个 jar,ortools-java-9.0.9048.jarortools-darwin-x86-64-9.0.9048.jar。这两个jar是从官方文件中解压出来的,在主目录下。

ortools-java-9.0.9048.jar是算法包,不用太在意。您只需为您的程序添加依赖项即可。

关键是ortools-darwin-x86-64-9.0.9048.jar。下面的代码就是读取这个jar最终调用ortools-java-9.0.9048.jar中的算法:

import com.google.ortools.Loader;
Loader.loadNativeLibraries();

通常在IDEA中运行良好。但是当你将代码打包成jar文件时,由于Loader.loadNativeLibraries();ortools-darwin-x86-64-9.0.9048.jar.

中找不到文件而发生错误。

解决方法是解压ortools-darwin-x86-64-9.0.9048.jar得到libjniortools.dylib的绝对路径(如果你用的是linux,就是一个类似libjniortools.so的文件,类似于 Windows 中的 libjniortools.dll 的文件)。并使用以下代码代替 Loader.loadNativeLibraries();

System.load("Absolute path/libjniortools.dylib");

用这种方法打包代码后就可以了。

对于 macOS,您可以尝试此代码,类似于@Muz 解决方案

public static void loadOrToolLibrary() {
        String os = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH);
        if (os.equals("mac os x")) { // only for MAC local
            File file = new File("src/main/resources/macosLocal/libjniortools.dylib");
            String absolutePath = file.getAbsolutePath();
            System.load(absolutePath);
        } else {
            Loader.loadNativeLibraries();
        }
    }