Selama pengembangan Java, kami kadang -kadang bersentuhan dengan banyak perpustakaan lokal, jadi ketika mengemas proyek, kami harus menghadapi pilihan: Entah meletakkan file perpustakaan bersama dengan file jar yang dibungkus; Atau bungkus file perpustakaan ke dalam toples.
Ada banyak keuntungan rilis untuk membungkus proyek kecil menjadi toples. Kali ini, kami akan berbagi metode untuk memasukkan JNI ke dalam toples.
[Ide Implementasi]
Setelah pustaka JNI yang dikemas (DLL, SO, dll.) Ke dalam guci, kami tidak dapat mengaksesnya melalui jalur, dan bacaan perpustakaan tergantung pada file perpustakaan eksternal dengan nama yang sesuai di bawah java.library.path. Kami hanya perlu merilisnya dari paket JAR sebelum memanggil JNI, yang mirip dengan proses penyalinan file.
[Memilih lokasi penempatan]
java.library.path bukan lokasi yang tetap, dan Anda dapat mencetaknya menggunakan kode berikut:
System.out.println (System.getProperty ("java.library.path"));
Misalnya, di komputer saya, hasilnya adalah:
File Program: x86)/java/jre7/bin; c:/windows/sun/java/bin; c:/windows/system32; c:/windows; d:/file program (x86)/java/jre7/bin/klien; D:/file program (x86)/java/jre7/bin; (x86)/java/jre7/lib/i386; c:/file program (x86)/nvidia Corporation/Physx/Common; C:/Windows/System32; C:/Windows; C:/Windows/System32/WBEM; c: /windows/system32/windowspowershell/v1.0/; e:/deve LOP/JDK1.7.0_71/bin; e:/kembangkan/git/cmd; e:/kembangkan/git/bin; e: /develop/apache-maven-3.2.1/bin; e:/eclipse-java-luna-sr1-win32/eclipse ;;
Jalur absolut akan berubah karena sistem yang berbeda, jadi di sini kita memilih jalur relatif ".", Yang ada di direktori proyek.
[Kelas Penerapan JNI]
Impor java.io.file; impor java.io.fileoutputStream; impor java.io.inputstream; impor java.util.arrays; import java.util.linkedlist; import java.util.list; cache; liste.util.list; kelas publik jndrevent {byte (] (] cache; list -list; = byte baru [1024]; Sumber = LinkedList baru <string> (); // Tambahkan nama file perpustakaan lokal di sini, Anda juga dapat sedikit memodifikasi dan membaca XML eksternal atau Sumber Properti ("Sumber (" LuAjava-1.1.1.dll "); Sumber.Add (" Libluajava-1.so.so "); Sources.add (" Libluajava-1.so.so "); Sumber} sumber (" LIBLUAJAVA-11.SO.SO.SO "); File ("." + File.separator + Sourcename); return f.exists ();} public void dodefaultDevelopment () {for (string s: Sources) {dodevelopment (s);}} public boolean dodevelopment (string sourcename) {if if (sourceExist (sourcename) {sourcename) {sourcename) {sourcename) {{sourcename) {sourcename) {sourcename) {sourcename) {sourcename) {sourcename) {sourcename) {sourcename) {sourcename) {sourcename) {sourcename) {sourcename) {sourcename) {sourcename) File.separator + Sourcename); if (! F.exists ()) {f.createNewFile (); System.out.println ("[jnidev]: inisi JNI default:" + sourcename);} fileOutputStream os = new fileoutputStream (f); inputStream) (sourcstream (sumbsstream (sumbsstream (new fileOutputStream (f); inputStream) (inputStream () (sumbsstream () (inputStream iS = sumbsstream (new fileoutputStream (f); inputStream) (sumbsstream (gets (sumbsstream (new fileOutputStream (f); inputStream is = ifcclassStream. == null) {os.close (); return false;} arrays.fill (cache, (byte) 0); int realread = is.read (cache); while(realRead != -1){os.write(cache, 0, realRead);realRead = is.read(cache);}os.close();}catch(Exception e){System.out.println("[JNIDEV]:ERROR IN COPY JNI LIB!");e.printStackTrace();return false;}}return true;}public static void main (string [] args) {jnidevelopment deve = new jnidevelopment (); deve.dodefaultdevelopment (); coba {System.loadLibrary ("luajava-1.1"); System.out.println ("Local Library Loading berhasil");} catch (Unsativedlink ("libryler {libral {libral {o libryln (o libry. gagal");}}}Kemudian kami menempatkan perpustakaan setempat di bawah paket yang sama dengan kelas ini:
[Hasil Jalankan]
[Jnidev]: Inisi JNI default: luajava-1.1.dll
[Jnidev]: Inisi JNI default: Libluajava-1.1.so
Layanan Perpustakaan Lokal berhasil
Meringkaskan
Di atas adalah semua tentang diskusi singkat tentang pengemasan perpustakaan JNI ke dalam file jar. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat merujuk pada topik terkait Java lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!