Einkapselung nativer und JNI-Bibliotheken in einem einzigen JAR
Problem:
Einbindung von Tokyo Schrankbibliothek in ein JAR, um die Verteilung zu vereinfachen und gleichzeitig die Notwendigkeit einer manuellen Neuverteilung der Bibliothek zu vermeiden. Die derzeit verfügbare Lösung weist Einschränkungen hinsichtlich der Einbeziehung der nativen Bibliothek und der Beschränkung ihrer Verwendung auf ein bestimmtes Plugin auf.
Lösung: Können native und JNI-Bibliotheken zusammen in einem JAR verpackt werden?
Ja, die Erstellung eines einheitlichen JAR mit der nativen JNI-Bibliothek für verschiedene Plattformen ist machbar. System.load(File) kann zum Laden der Bibliothek verwendet werden, wodurch das übliche System.loadLibrary(String) umgangen wird und die Notwendigkeit einer Bibliotheksinstallation auf Systemebene entfällt. Der Nachteil liegt in einer möglichen Plattforminkompatibilität, da das JAR möglicherweise nicht Bibliotheken für alle unterstützten Plattformen enthält.
Prozess:
Statische Initialisierung: Implementieren Sie einen statischen Initialisierer innerhalb der Hauptklasse, der:
Hybrid Lösung:
Es kann ein hybrider Ansatz verwendet werden, der sowohl das Laden eingebetteter Bibliotheken als auch die systemweite Bibliothekssuche entlang dieser ermöglicht java.library.path. Dies stellt die Kompatibilität für Plattformen sicher, auf denen die eingebettete Bibliothek nicht verfügbar ist.
Beispielimplementierung:
Die jzmq-Java-Bindungen von ZeroMQ zeigen diese Funktionalität. Der [hier] verfügbare Code (Link zum JZMQ-Code) bietet ein nahtloses Ladeerlebnis bei gleichzeitiger Beibehaltung der Plattformflexibilität.
Das obige ist der detaillierte Inhalt vonKönnen native und JNI-Bibliotheken zur einfacheren Verteilung in einem JAR zusammengefasst werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!