Javaの開発中に、多くのローカルライブラリと接触することがあるため、プロジェクトをパッケージ化するときは、選択肢に直面する必要があります。または、ライブラリファイルを瓶に巻き付けます。
小さなプロジェクトを瓶に包むことには、多くのリリースの利点があります。今回は、JNIを瓶に含める方法を共有します。
[実装のアイデア]
JNIライブラリ(dllなど)を瓶にパッケージ化した後、パスを介してそれらにアクセスすることはできません。ライブラリの読み取りは、java.library.pathに対応する名前を持つ外部ライブラリファイルに依存します。 JNIを呼び出す前に、JARパッケージからリリースする必要があります。これは、ファイルのコピープロセスに似ています。
[展開場所の選択]
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ファイル(x86)/java/jre7/lib/i386; c:/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:/develop/git/cmd; e:/develop/git/bin; e:/develop/apache-maven-3.2.1/bin;
システムが異なるために絶対パスが変更されるため、ここではプロジェクトディレクトリにある相対パス「。」を選択します。
[JNI展開クラス]
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 cache {bus <but <cache [] cache [] = new byte [1024]; sources = new linkedlist <string>(); //ここでローカルライブラリファイル名を追加すると、外部XMLまたはプロパティソースをわずかに変更および読み取ることもできます。 file( "。" + file.separator + sourcename); return f.exists();} public void dodefaultdevelopment(){for(string s:sources){dodevelopment(s);}} public boolean dodevelopment(string sourcename){if(source exist(soure exist(soure exist(sourcename)) file.separator + sourcename); if(!f.exists()){f.createNewfile(); system.out.println( "[jnidev]:default jni inition:" + sourcename);} fileoutputStream os = new fileoutputStream( null){os.close(); return false;} arrays.fill(cache、(byte)0); int realread = is.read(cache); while(rearread!= -1){os.write(cache、0、realread); realread = is.read(cache);} os.close();} catch(exceps.out.println( "[jnidev]:copy in jni lib!"); {jnidevelopment deve = new jnidevelopment(); deve.dodefaultdevelopment(); try {system.loadLibrary( "luajava-1.1"); system.out.println( "Local Library Loading");} catch(UnstisfiedLinkerror E)次に、このクラスと同じパッケージの下にローカルライブラリを配置します。
[結果を実行]
[Jnidev]:デフォルトのJNI Inition:Luajava-1.1.dll
[Jnidev]:デフォルトのJNI Inition:Libluajava-1.1.SO
ローカルライブラリの読み込みに正常に
要約します
上記は、JNIライブラリをJARファイルにパッケージ化するための簡単な議論に関するものです。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他のJava関連のトピックを参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!