使用 Spring Boot 加载本机库

Sma*_*ajl 5 java gradle spring-boot

我有一个加载本机库的简单 Spring Boot 项目。问题是我不知道如何在运行应用程序时指定本地库的路径。

我已经阅读了大量解释如何设置的帖子,java.library.path但每一个都会导致

java.lang.UnsatisfiedLinkError: /path/to/lib/libconnector.so: libconnector.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如果我从命令行按顺序运行这两个命令,则该项目有效:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/lib
./gradlew bootRun
Run Code Online (Sandbox Code Playgroud)

该库已加载并运行。但是我无法在我的 gradle 文件中指定库路径。我试过

run {
    systemProperty 'java.library.path', file('/path/to/lib')
}

bootRun {
    systemProperty 'java.library.path', file('/path/to/lib')
}
Run Code Online (Sandbox Code Playgroud)

以及各种变体。还尝试向我的 IDE 等添加 VM 参数,但没有任何效果。有人可以解释我做错了什么吗?

这是我加载本机库(位于$projectRoot/lib)的方式:

static {
        // load connector library
        File lib = new File("lib/" + System.mapLibraryName("connector"));
        System.load(lib.getAbsolutePath());
}
Run Code Online (Sandbox Code Playgroud)

Sma*_*ajl 3

我终于解决了我的问题。运行应用程序时,我应该LD_LIBRARY_PATH作为环境变量而不是系统属性传递。java.library.path

以下 Gradle 修改解决了我的问题:

tasks.withType(JavaExec) {
    environment('LD_LIBRARY_PATH', 'lib')
}
Run Code Online (Sandbox Code Playgroud)