Regrouper les bibliothèques natives et JNI dans un seul JAR
Puis-je tout regrouper dans un seul JAR et le redistribuer ?
Oui, il est possible de créer un seul fichier JAR contenant toutes les dépendances, y compris les bibliothèques JNI natives pour plusieurs plates-formes. Cependant, cela peut avoir des implications en matière de portabilité.
Processus :
-
Inclure les bibliothèques JNI natives dans le fichier JAR : Placez-les dans emplacements spécifiques à la plate-forme dans le JAR, par exemple : NATIVE/${os.arch}/${os.name}/libname.lib.
-
Implémentation du code :
- Calculer os. arch et os.name lors de l'initialisation de la classe.
- Utilisez Class.getResource(String) pour trouver la bibliothèque dans le JAR.
- Si la bibliothèque existe, extrayez-la dans un fichier temporaire et chargez-la avec System.load(File).
Exemple d'implémentation :
Le package jzmq (liaisons Java de ZeroMQ) a implémenté cette solution. Le code peut être trouvé ici, offrant une approche hybride qui revient au chargement de bibliothèque conventionnel si le chargement de bibliothèque intégrée échoue.
Avantages :
-
Simplifié Distribution : évite aux utilisateurs d'avoir à installer des bibliothèques JNI sur leur systèmes.
Considérations :
-
Portabilité : La prise en charge de toutes les plates-formes dépend de l'inclusion de bibliothèques spécifiques dans le JAR fichier.
-
Maintenance : Garder le JAR à jour avec la dernière version native les dépendances peuvent nécessiter des mises à jour manuelles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
Déclaration:Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn