Как вызвать вызовы DLL из веб-проекта Spring boot maven? - PullRequest
0 голосов
/ 08 мая 2019

У меня есть проект Springboot maven для разработки веб-приложения со встроенным джет-сервером.Целевая упаковка - это jar, и при выполнении она должна прослушивать localhost. Веб-приложение работает, как и ожидалось, и я могу вызывать API-интерфейсы Rest, которые я представил с помощью RestController.

Теперь мне нужно интегрироватьSDK (автономный jar) и использует возможности, предоставляемые jar.

Jar - это оболочка для DLL.Чтобы использовать его, jar и DLL должны находиться в одном каталоге.Он использует JNI для раскрытия функциональности DLL.Как я могу интегрировать этот SDK (jar with dll) в мой проект maven-springboot.SDK является выводом нормального проекта Java (который не использует Maven)?Также есть ли какие-либо ограничения при вызове dll (используя System.load()) со встроенного сервера?Будут ли ошибки связывания?

Также возможно ли упаковать все в один исполняемый jar (зависимый jar и dll)?

1 Ответ

0 голосов
/ 13 мая 2019

Также возможно ли упаковать все в один исполняемый jar (зависимый jar и dll)?

Нет, любая библиотека (DLL) должна быть в файловой системе и загруженакак это было бы с ОС.Вы не можете скрыть это в файле JAR.

Что касается System.load(), не используйте или не полагайтесь на относительные пути.У вас есть два основных варианта.

  1. Использовать полный путь к файловой системе.
try {
    System.load("C:/projects/masterpo/grasshopper.dll");
} catch (UnsatisfiedLinkError e) {
    throw new ServletException("Unable to load library");
}

Используйте системное свойство java.library.path при запуске JVM.

Для этого потребуется настроить java.library.path, когда JVM начнет что-то допустимое, указывая на каталог C:/projects/masterpo/.(это может быть этап установки).Но тогда вы можете просто использовать ...

try {
    System.load("grasshopper");
} catch (UnsatisfiedLinkError e) {
    throw new ServletException("Unable to load library");
}

Что касается использования System.load(), рассмотрите возможность использования Runtime.getRuntime().load(name) вместо.

...