Java 개발 중에는 때때로 많은 지역 라이브러리와 연락을 취하기 때문에 프로젝트를 포장 할 때는 선택에 직면해야합니다. 랩핑 된 JAR 파일과 함께 라이브러리 파일을 넣습니다. 또는 라이브러리 파일을 항아리로 감습니다.
작은 프로젝트를 항아리로 포장하는 데 많은 릴리스 장점이 있습니다. 이번에는 JNI를 항아리에 포함시키는 방법을 공유 할 것입니다.
[구현 아이디어]
JNI 라이브러리 (DLL, SO 등)를 항아리로 포장 한 후 경로를 통해 액세스 할 수 없으며 라이브러리의 읽기는 java.library.path에 해당 이름이있는 외부 라이브러리 파일에 따라 다릅니다. JNI를 호출하기 전에 JAR 패키지에서만 해제하면 파일 복사 프로세스와 유사합니다.
[배포 위치 선택]
java.library.path는 고정 된 위치가 아니며 다음 코드를 사용하여 인쇄 할 수 있습니다.
System.out.println (System.GetProperty ( "java.library.path"));
예를 들어, 내 컴퓨터에서 결과는 다음과 같습니다.
d :/program 파일 (x86)/java/jre7/bin; c :/window/sun/java/bin; c :/windows/system32; c :/wind (x86)/java/jre7/lib/i386; c :/program files (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 :/delop/git/cmd; e :/develop/git/bin; e : /develop/apache-maven-3.2.1/bin; e :/eclipse-java-luna-sr1-win32/eclipse;;;
다른 시스템으로 인해 절대 경로가 변경되므로 여기서는 프로젝트 디렉토리에있는 상대 경로 "."를 선택합니다.
[JNI 배포 클래스]
import java.io.file; import java.io.fileoutputStream; import java.io.inputStream; import java.util.arrays; import java.util.linkedlist; import java.util.list; import java.util.list; public class jnidevelopment it [cach; cash; cach; = New Byte [1024]; sources = new LinkedList <string> (); // 로컬 라이브러리 파일 이름을 여기에 추가하면 외부 XML 또는 속성 소스를 약간 수정하고 읽을 수 있습니다. 새 파일 ( "." + file.separator + sourcename); return f.exists ();} public void dodefaultDevelopment () {for (string s : sources) {dodevelopment (s);}} public boolean dovelovent (string sourcename) {if (sourcexist (sourcename) ") file.separator + sourcename); if (! f.exists ()) {f.createnewfile (); system.out.println ( "[jnidev] : default jni inition :" + sourceName);} fileoutputStream os = new FileOutputStream (f); inputStream is = getresourceastream (is getresourceastream); == 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 (예외 e) {system.out.println ( "[jnidev] : e.printstacktrace ("[jnidev] : e.printstacktrace (e.printstacktrace); {jnidevelopment deve = new jnidevelopment (); deve.dodefaultDevelopment (); try {System.LoadLibrary ( "luajava-1.1"); System.out.println ( "로컬 라이브러리로드");그런 다음이 클래스와 동일한 패키지 아래 로컬 라이브러리를 배치합니다.
[실행 결과]
[JNIDEV] : 기본 JNI Inition : Luajava-1.1.dll
[JNIDEV] : 기본 JNI Inition : Libluajava-1.1.so
로컬 라이브러리로드가 성공적으로로드됩니다
요약
위의 것은 JNI 라이브러리를 JAR 파일로 포장하는 것에 대한 간단한 토론에 관한 것입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 Java 관련 주제를 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!