Während der Java -Entwicklung kommen wir manchmal mit vielen lokalen Bibliotheken in Kontakt. Wenn wir also das Projekt verpacken, müssen wir uns vor der Wahl stellen: Weder die Bibliotheksdatei zusammen mit der verpackten JAR -Datei zusammenstellen; oder wickeln Sie die Bibliotheksdatei in das Glas ein.
Es gibt viele Release -Vorteile, um ein kleines Projekt in ein Glas einzuwickeln. Dieses Mal werden wir eine Methode zur Aufnahme von JNI in ein Glas teilen.
[Implementierungsidee]
Nach den verpackten JNI -Bibliotheken (DLL usw.) in Gläser können wir nicht über Pfade auf sie zugreifen, und die Lesart der Bibliothek hängt von einer externen Bibliotheksdatei mit dem entsprechenden Namen unter java.library.path ab. Wir müssen es nur aus dem JAR -Paket veröffentlichen, bevor wir JNI anrufen, das dem Kopierprozess des Datei ähnelt.
[Bereitstellungsort auswählen]
java.library.path ist kein fester Ort, und Sie können ihn mit dem folgenden Code drucken:
System.out.println (System.getProperty ("java.library.Path"));
Zum Beispiel ist das Ergebnis auf meinem Computer:
D:/Programmdateien (x86)/java/jre7/bin; c:/window/sun/java/bin; c:/window/system32; (x86)/java/jre7/lib/i386; c:/Programmdateien (x86)/nvidia Corporation/Physx/Common; C:/Windows/System32; C:/Windows; lop/jdk1.7.0_71/bin; e:/entwickeln/git/cmd; e:/entwickeln/git/bin; e: /develop/apache-maven-3.2.1/bin; e:/eclipse-java-luna-sr1-win32/eclipse;
Der absolute Pfad ändert sich aufgrund verschiedener Systeme, daher wählen wir hier den relativen Pfad ".", Der sich im Projektverzeichnis befindet.
[JNI -Bereitstellungsklasse]
import Java.io.file; Import Java.io.fileOutputStream; Import Java.io.inputStream; Import Java.util.Arrays; Import Java.util.LinkedList; Importieren Sie Java.util.List; List; List; BYTE [1024]; Quellen = Neue LinkedList <String> (); // Fügen Sie hier den Namen der lokalen Bibliotheksdatei hinzu, Sie können auch ein externes XML- oder Eigenschaften von Quellen geringfügig ändern und lesen. File("." + File.separator + sourceName);return f.exists();}public void doDefaultDevelopment(){for (String s:sources){doDevelopment(s);}}public Boolean doDevelopment(String sourceName){if(sourceExist(sourceName)){return true;} else{try{File f = new File("." + Datei.Sesparator + Sourcename); if (! F.exists ()) {f.createNewFile (); System.out.println ("[JNIDEV]: Standard JNI Inition:" + Sourcename);} FileOutputStream os = new FileputStream (F). null) {os.close (); return false;} arrays.fill (cache, (byte) 0); int realread = is.read (cache); while (realread! main (String [] args) {jNidEvelopment deve = new JNIDEvelopment (); deve.DodeFaultDevelopment (); try {System.loadlibrary ("luajava-1.1"); fehlgeschlagen");}}}Dann legen wir die lokale Bibliothek unter dasselbe Paket wie diese Klasse:
[Run -Ergebnis]
[Jnidev]: Standard Jni Inition: luajava-1.1.dll
[JNIdev]: Standard Jni Inition: libluajava-1.1.so
Lokale Bibliothek erfolgreich geladen
Zusammenfassen
Im obigen Bereich dreht sich alles um die kurze Diskussion über die Verpackung der JNI -Bibliothek in eine JAR -Datei. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können sich auf andere Java-bezogene Themen auf dieser Website beziehen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!