Я пытаюсь создать исполняемый файл jar для проекта, в котором папка ресурса библиотеки java имеет зависимость в самом проекте . Я хочу развернуть эту флягу без необходимости для пользователя загружать эту зависимость отдельно. Поэтому я добавил эту библиотеку java в качестве ресурса к моему проекту и собрал ее. Внутри исходного кода проекта у меня есть следующий код, чтобы попытаться установить «java .library.path» для включения этого ресурса.
Вот как выглядит мой код:
URL url = Staple.class.getResource("/path/to/java_library_name");
String stringUrl = url.toString();
System.setProperty( "java.library.path", stringUrl );
Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );
Однако при сборке кода и попытке выполнить сам jar это не работает, и я получаю следующую ошибку:
no java_library_name in java.library.path: [jar, file, /path/to/project/target/jar_name-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/path/to/java_library_name]
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2660)
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:829)
at java.base/java.lang.System.loadLibrary(System.java:1867)
.....
В чем проблема с приведенным выше кодом? Похоже, что он неверно описал весь путь и составил что-то вроде /path/to/project/target/jar_name-0.0.1-SNAPSHOT-jar-with-dependencies.jar!/path/to/java_library_name
Как иначе можно программно получить путь, который включает папку библиотеки java после создания jar и во время выполнения?