Также возможно ли упаковать все в один исполняемый jar (зависимый jar и dll)?
Нет, любая библиотека (DLL) должна быть в файловой системе и загруженакак это было бы с ОС.Вы не можете скрыть это в файле JAR.
Что касается System.load()
, не используйте или не полагайтесь на относительные пути.У вас есть два основных варианта.
- Использовать полный путь к файловой системе.
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)
вместо.