Java 使用Spring引导加载本机库

Java 使用Spring引导加载本机库,java,spring-boot,gradle,Java,Spring Boot,Gradle,我有一个加载本机库的简单Spring引导项目。问题是,我不知道在运行应用程序时如何指定本机库的路径 我已经阅读了大量解释如何设置java.library.path的帖子,但每一篇都会导致 java.lang.UnsatisfiedLinkError: /path/to/lib/libconnector.so: libconnector.so: cannot open shared object file: No such file or directory 如果我从命令行按顺序运行这两个命令,

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

我已经阅读了大量解释如何设置
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
):

您可以简单地使用:

dependencies {
    compile files('libs/something_local.jar')
}

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

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

tasks.withType(JavaExec) {
    environment('LD_LIBRARY_PATH', 'lib')
}

您可以编写一个
init
方法来自动设置
java.library.path
, 以下是一些代码:

    String path = "/path/to/lib";
    String path = System.getProperty("java.library.path");
    // if os is windows
        path += ";" + classPath.getCanonicalPath();
    // if os is linux
        path += ":" + classPath.getCanonicalPath();
    System.setProperty("java.library.path", path);

注意:首先运行此方法。

尝试从类中加载库(只是为了测试)

注:我不确定,但如果你需要使用so文件,你必须在linux操作系统上

public class Test {
       static {
    try {

        System.loadLibrary("yourSohere");
       // or System.load("/path/to/lib.so");
    }
  }
    }

这是一个本机
。因此
库,而不是java依赖项,因此这种方法不起作用。我需要能够用JNI加载它。它需要位于
java.library.path
public class Test {
       static {
    try {

        System.loadLibrary("yourSohere");
       // or System.load("/path/to/lib.so");
    }
  }
    }