Во время разработки Java мы иногда вступаем в контакт со многими местными библиотеками, поэтому при упаковке проекта мы должны столкнуться с выбором: либо соедините файл библиотеки вместе с обернутым файлом JAR; или оберните файл библиотеки в банку.
Есть много преимуществ выпуска для завершения небольшого проекта в банку. На этот раз мы поделимся методом, чтобы включить JNI в банку.
[Идея реализации]
После упакованных библиотек JNI (DLL, SO и т. Д.) В банки мы не можем получить к ним доступ через пути, и чтение библиотеки зависит от внешнего файла библиотеки с соответствующим именем под java.library.path. Нам нужно только выпустить его из пакета JAR перед вызовом JNI, что похоже на процесс копирования файла.
[Выбор места развертывания]
java.library.path не является фиксированным местоположением, и вы можете распечатать его, используя следующий код:
System.out.println (System.getProperty ("java.library.path"));
Например, на моем компьютере результат:
D:/программные файлы (x86)/java/jre7/bin; c:/windows/sun/java/bin; c:/windows/system32; c:/windows; d:/program files (x86)/java/jre7/bin/client; d:/program files (x86)/java/jre7/bin; d:/program files; (x86)/java/jre7/lib/i386; c:/program files (x86)/nvidia Корпорация/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:/Разработка/git/cmd; e:/Разработка/git/bin; e: /develop/apache-maven-3.2.1/bin; e:/eclipse-java-luna-sr1-32/eclipse ;;
Абсолютный путь изменится из -за разных систем, поэтому мы выбираем относительный путь ».», Который находится в каталоге проекта.
[Класс развертывания JNI]
Импорт java.io.file; import java.io.fileoutputstream; import java.io.inputstream; import java.util.arrays; import java.util.linkedlist; import java.util.list; импорт java.util.list; Byte [1024]; Sources = new LinkedList <string> (); // Добавить здесь имя локальной библиотеки здесь, вы также можете немного изменить и прочитать внешние XML или свойства источников. File ("." + File.separator + sourcename); return f.exists ();} public void dodefaultdevelopment () {for (String s: источники) {dodevelopment (s);}} public boolean dodevelopman File.sparator + sourcename); if (! F.exists ()) {f.createnewfile (); System.out.println ("[jnidev]: jni по умолчанию:" + sourceName);} fileOutputStream OS = new FileOutputStream (f); inputStream is = GetClass (). null) {os.close (); return false;} arrays.fill (cache, (byte) 0); int Realred = is.read (cache); while (RealRead! = -1) {Os.Write (Cache, 0, RealRude); RealRead = is.Read (cache);} os.close ();} catch (Exception e) {System.out.println ("[jnidev]: ошибка в копии jni lib!"); e.printstacktrace (); return false;} retury true; {Jnidevelopment deve = new jnidevelopment (); deve.dodefaultdevelopment (); try {System.loadlibrary ("luajava-1.1"); System.out.println ("Локальная библиотека успешно загружается");} Catch (unsabiedLinkError E) {System.out.Printlnln (Local Local Local Local Local Local Localing e) {System.out.out.println (Local Local Localing e);Затем мы размещаем локальную библиотеку в тот же пакет, что и этот класс:
[Результат запустить]
[Jnidev]: по умолчанию JNI INITION: LUAJAVA-1.1.DLL
[Jnidev]: по умолчанию JNI INITION: libluajava-1.1.so
Локальная библиотека успешно загружается
Суммировать
Выше приведенное дело о кратком обсуждении упаковки библиотеки JNI в файл JAR. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут ссылаться на другие темы, связанные с Java на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!