Я пытаюсь загрузить внешнюю библиотеку с помощью Spring Boot:
@Service
public class PrevisaoDLLService {
private Logger logger = LoggerFactory.getLogger( PrevisaoDLLService.class );
private PrevisaoDLL previsaoDll;
// Some code of functions are out of scope and ommited
@PostConstruct
public void startup() {
logger.info( System.getProperty("java.library.path" ) );
try {
previsaoDll = Native.loadLibrary( /*lib*/"previsao"/*.so*/, PrevisaoDLL.class); // libprevisao.so
} catch ( Exception e ) {
logger.error( e.getMessage() );
}
}
}
Я уже поместил "-Djna.library.path=/opt/libraries
и -Djava.library.path=/opt/libraries
в свою командную строку.
После получения этой ошибки
Caused by: java.lang.UnsatisfiedLinkError: Unable to load library 'previsao': Native library (linux-x86-64/libprevisao.so) not found in resource path ([jar:file:/opt/lib/mare-1.0.war!/WEB-INF/classes!/, jar:file:/opt/lib/mare-1.0.war!/WEB-INF/lib/springfox-swagger-ui-2.9.2.jar!/, jar:file:/opt/lib/mare-1.0.war!/WEB-INF/lib/spring-boot-starter-logging-2.1.9.RELEASE.jar!/, jar:file:/opt/lib/mare-1.0.war!/WEB-INF/lib/spring-boot-starter-jdbc-2.1.9.RELEASE.jar!/, jar:file:/opt/lib/mare-1.0.war!/WEB-INF/lib/spring-webmvc-5.1.10.RELEASE.jar!/, Blah Blah Blah
Я попробовал другой подход, поместив мою библиотеку в папку «ресурсы» (вместе с pplication.config), но затем я начал получать эту ошибку:
java.lang.UnsatisfiedLinkError: Unable to load library 'previsao': Can't obtain InputStream for linux-x86-64/libprevisao.so
Я тестировал этот метод с автономным (стандартным) java работающим JAR, и все работало нормально. Но когда я перенес тот же код в приложение Spring Boot, все пошло не так. Мое приложение Spring Boot APP - это исполняемая WAR (не JAR), потому что Swagger и мои контроллеры ...
Строка logger.info( System.getProperty("java.library.path" ) );
правильно показывает мне папку, которую я указал в аргументе командной строки, и библиотека там .
Почему Spring Boot не загружает мою библиотеку?