HowTo : Comment configurer le chemin de bibliothèque pour les bibliothèques dépendantes de JNI

Compatibilité :2.2.9
Éditions :Édition ProfessionnelleÉdition StandardÉdition Community
Plateformes :WindowsMac OSXLinuxAlpine LinuxFreeBSDSolarisIBM z/Linux

Java charge les bibliothèques natives (JNI) en recherchant le chemin défini avec la propriété système java.library.path. Le Java Service Wrapper rend très facile la configuration de ce chemin de manière indépendante de la plateforme en utilisant les propriétés wrapper.java.library.path.<n>.

L'exemple suivant configure un chemin de bibliothèque qui recherchera les bibliothèques JNI dans les répertoires ../lib/ et ../lib2/ :

wrapper.java.library.path.1=../lib/
wrapper.java.library.path.1=../lib2/

Cela suffit pour la plupart des bibliothèques JNI. Cependant, certaines bibliothèques utilisent elles-mêmes d'autres bibliothèques liées dynamiquement. Java localisera la bibliothèque JNI initiale à l'aide du chemin de bibliothèque Java, mais les bibliothèques secondaires sont chargées selon le mécanisme par défaut de la plateforme.

Sous Windows, le système cherche d'abord dans le répertoire de travail actuel (l'emplacement de wrapper.exe), puis dans le répertoire Windows system32 et le répertoire Windows. Enfin, il parcourt l'ensemble du PATH système. Si les deux DLL se trouvent dans le répertoire lib de votre application, il peut être nécessaire d'ajouter son emplacement au chemin système comme suit. La propriété set.PATH est destinée à Windows et set.LD_LIBRARY_PATH rend le fichier de configuration multiplateforme afin qu'il fonctionne également sur les systèmes UNIX. macOS utilise également la variable set.DYLD_LIBRARY_PATH.

set.PATH=..%WRAPPER_FILE_SEPARATOR%lib%WRAPPER_PATH_SEPARATOR%%PATH%
set.LD_LIBRARY_PATH=..%WRAPPER_FILE_SEPARATOR%lib%WRAPPER_PATH_SEPARATOR%%LD_LIBRARY_PATH%
set.DYLD_LIBRARY_PATH=..%WRAPPER_FILE_SEPARATOR%lib%WRAPPER_PATH_SEPARATOR%%DYLD_LIBRARY_PATH%

Notez que placer la bibliothèque secondaire dans le PATH plutôt que dans le répertoire de travail actuel présente le risque qu'une ancienne version de la bibliothèque soit rencontrée en premier dans le répertoire Windows system32 si elle a été installée par une autre application. Cela est dû à l'ordre dans lequel le système recherche le fichier.

Ce problème a été constaté lors de l'utilisation des bibliothèques JCO de SAP si d'autres applications SAP sont également installées sur le système.

Veuillez consulter la documentation de la propriété wrapper.java.library.path.<n> pour plus d'informations.