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

swvgeqrz  于 2023-03-06  发布在  Java
关注(0)|答案(3)|浏览(232)

安装mvn后生成jar。无法在Windows上加载Loader.loadNativeLibraries()。
ortools的版本是9. 0. 9048,我在windows上使用过,我在项目中添加了下面两个jar,我像link所说的那样添加了它们。

然后两个jar是在这里的想法。

pom文件如下所示:

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

它说的是java.nio.file.没有这样的文件异常:/BOOT-INF/lib/或tools-win32 -9.0.jar!/win32-x86-64/,但是当我在winrar中打开这个jar时,它是存在的。

有人知道原因吗?

zsbz8rwp

zsbz8rwp1#

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,则在Windows中它将是一个类似于libjniortools.so的文件和一个类似于libjniortools.dll的文件),并使用以下代码代替Loader.loadNativeLibraries();

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

它将在您使用此方法打包代码后工作。

g52tjvyc

g52tjvyc2#

官方文物有:
群组:com.google.或工具,人工制品:奥尔图尔斯- java
https://search.maven.org/artifact/com.google.ortools/ortools-java/9.0.9048/jar

mzmfm0qo

mzmfm0qo3#

对于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();
        }
    }

相关问题