一尘不染

使用Spring Boot加载本地库

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

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

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/lib
./gradlew bootRun

该库已加载并可以工作。但是我无法在我的gradle文件中指定库路径。我试过了

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

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

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

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

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

阅读 530

收藏
2020-05-30

共1个答案

一尘不染

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

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

tasks.withType(JavaExec) {
    environment('LD_LIBRARY_PATH', 'lib')
}
2020-05-30