Bündelung nativer und JNI-Bibliotheken in einem JAR
Kürzlich suchte ein Entwickler nach einer Möglichkeit, mehrere Abhängigkeiten, einschließlich nativer Bibliotheken, innerhalb eines zu konsolidieren einzelne JAR-Datei. Diese Strategie zielt darauf ab, die Verteilung zu vereinfachen und Umverteilungsprobleme zu reduzieren.
Das Rätsel der nativen Bibliothek
Eine der Herausforderungen bei diesem Unterfangen war die Einbeziehung der eigentlichen nativen Bibliothek, als bestehender Versuch, der sich ausschließlich auf die JNI-Bibliothek konzentrierte. Darüber hinaus schien die vorherige Lösung auf ein bestimmtes natives Abhängigkeits-Plugin zugeschnitten zu sein und möglicherweise nicht für die allgemeine Weiterverteilung geeignet.
Eine umfassende Lösung
Der bevorzugte Ansatz beinhaltet die Verwendung System.load(File) zum Laden der Bibliothek anstelle des herkömmlichen Systems.loadLibrary(String), das auf der Systemeigenschaft java.library.path basiert. Diese Methode macht es für Benutzer überflüssig, die Bibliothek manuell zu installieren, kann jedoch die plattformübergreifende Portabilität beeinträchtigen, wenn das JAR nicht alle erforderlichen Bibliotheken kapselt.
Implementierungsprozess
Implementieren Sie Code im statischen Initialisierer einer Hauptklasse, um:
Fallstudie: jzmq
Diese Lösung wurde in jzmq, Java-Bindungen für ZeroMQ, mit Hybridfunktionalität eingesetzt Ermöglicht die Suche nach der Bibliothek entlang des java.library.path, wenn die eingebettete Version nicht geladen werden kann.
Das obige ist der detaillierte Inhalt vonWie können Sie native und JNI-Bibliotheken in einer einzigen JAR-Datei bündeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!