无法执行 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.jar
和 ortools-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();
}
}
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.jar
和 ortools-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();
}
}