Загрузка нативной библиотеки с помощью Spring Boot - PullRequest
0 голосов
/ 29 августа 2018

У меня есть простой проект 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());
}

Ответы [ 4 ]

0 голосов
/ 29 августа 2018

попробуйте загрузить библиотеку из вашего класса (только для проверки)

Примечание: я не уверен, но если вам нужно использовать такой файл, вы должны быть под Linux.

public class Test {
       static {
    try {

        System.loadLibrary("yourSohere");
       // or System.load("/path/to/lib.so");
    }
  }
    }
0 голосов
/ 29 августа 2018

Я наконец решил свою проблему. При запуске приложения я должен передать LD_LIBRARY_PATH в качестве переменной среды вместо java.library.path в качестве системного свойства.

Следующая модификация Gradle решила мою проблему:

tasks.withType(JavaExec) {
    environment('LD_LIBRARY_PATH', 'lib')
}
0 голосов
/ 29 августа 2018

Вы можете написать 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);

Примечание: сначала запустите этот метод.

0 голосов
/ 29 августа 2018

Вы можете просто использовать:

dependencies {
    compile files('libs/something_local.jar')
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...