Maison  >  Article  >  Java  >  Comment regrouper les bibliothèques natives et JNI dans un seul fichier JAR ?

Comment regrouper les bibliothèques natives et JNI dans un seul fichier JAR ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-12 02:02:01754parcourir

How Can You Bundle Native and JNI Libraries in a Single JAR File?

Regrouper les bibliothèques natives et JNI dans un JAR

Récemment, un développeur a cherché un moyen de consolider plusieurs dépendances, y compris des bibliothèques natives, au sein d'un fichier JAR unique. Cette stratégie vise à simplifier la distribution et à réduire les problèmes de redistribution.

L'énigme de la bibliothèque autochtone

L'un des défis rencontrés dans cette entreprise était l'inclusion de la bibliothèque native réelle, comme une tentative existante axée uniquement sur la bibliothèque JNI. De plus, la solution précédente semblait être adaptée à un plugin de dépendances natif spécifique et pourrait ne pas convenir à une redistribution générale.

Une solution complète

L'approche privilégiée consiste à utiliser System.load(File) pour charger la bibliothèque au lieu du System.loadLibrary(String) conventionnel, qui s'appuie sur la propriété système java.library.path. Cette méthode élimine le besoin pour les utilisateurs d'installer la bibliothèque manuellement, mais elle peut compromettre la portabilité entre les plates-formes si le JAR n'encapsule pas toutes les bibliothèques nécessaires.

Processus de mise en œuvre

  1. Incorporez les bibliothèques JNI natives dans le JAR à des emplacements spécifiques à la plate-forme, par exemple : NATIVE/${os.arch}/${os.name}/libname.lib.
  2. Implémenter du code dans l'initialiseur statique d'une classe principale pour :

    • Déterminer le os.arch et os.name actuels.
    • Recherchez la bibliothèque dans le JAR au chemin prédéfini en utilisant Class.getResource(String).
    • Si la bibliothèque est présente, extrayez-la dans un fichier temporaire et chargez-la avec System.load(File).

Étude de cas : jzmq

Cette solution a été utilisée dans jzmq, des liaisons Java pour ZeroMQ, où les hybrides la fonctionnalité permet de revenir à la recherche de la bibliothèque le long du java.library.path si la version intégrée ne peut pas être chargée.

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