Durante o desenvolvimento do Java, às vezes entramos em contato com muitas bibliotecas locais; portanto, ao empacotar o projeto, temos que enfrentar uma escolha: colocar o arquivo da biblioteca junto com o arquivo jar embrulhado; ou envolva o arquivo da biblioteca no frasco.
Existem muitas vantagens de lançamento em envolver um pequeno projeto em uma jarra. Desta vez, compartilharemos um método para incluir o JNI em uma jarra.
[Ideia de implementação]
Após as bibliotecas JNI embaladas (DLL, então, etc.) em frascos, não podemos acessá -las através de caminhos, e a leitura da biblioteca depende de um arquivo de biblioteca externa com o nome correspondente em java.library.path. Precisamos apenas lançá -lo do pacote JAR antes de ligar para o JNI, que é semelhante ao processo de cópia do arquivo.
[Selecionando o local da implantação]
java.library.path não é um local fixo e você pode imprimi -lo usando o seguinte código:
System.out.println (System.getProperty ("java.library.path"));
Por exemplo, no meu computador, o resultado é:
D:/Arquivos de programas (x86)/java/jre7/bin; c:/windows/sun/java/bin; c:/windows/system32; c:/windows; d:/arquivos de programas (x86)/java/jre7/bin/client; d:/arquivos de programas (x86)/java/jre7/bin; (x86)/java/jre7/lib/i386; c:/arquivos de programas (x86)/nvidia Corporação/physx/comum; c:/windows/system32; c:/windows; c:/windows/system32/wbem; c: /windows/system32/windowspowershell/v1.0/; e:/deve lop/jdk1.7.0_71/bin; e:/desenvolve/git/cmd; e:/desenvolve/git/bin; e: /devell/apache-maven-3.2.1/bin; e:/eclipse-java-luna-sr1-win32/eclipse;;.
O caminho absoluto mudará devido a diferentes sistemas, então aqui escolhemos o caminho relativo ".", Que está no diretório do projeto.
[Classe de implantação JNI]
importar java.io.file; importar java.io.fileOutputStream; importar java.io.inputStream; importar java.util.arils; importar java.util.linkedlist; importação java.util.list; importen cache; = novo byte [1024]; fontes = new LinkedList <String> (); // Adicione o nome do arquivo da biblioteca local aqui, você também pode modificar ligeiramente e ler um XML ou propriedades externas ("Luajava-1.1.dll"); Sources.add ("Libluajava-1.So"); new 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("." + File.separator + sourceName); if (! F.exists ()) {f.createNewfile (); system.out.println ("[jnidev]: padrão jni inition:" + sourceName);} fileOutputStream OS = new FileOutStReRream (FEN); inputStream Is =} getCl (getsTream. == 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 (exceção e) {system.out.println ("jnidev]: erro em copy jni lib! {Jnidesenvolvment Deve = new Jnidevelopment (); Deve.DodeFaultDevelopment (); Try {System.loadLibrary ("Luajava-1.1"); System.out.println ("Library Library Library");Em seguida, colocamos a biblioteca local no mesmo pacote que esta classe:
[Resultado da execução]
[JNIDEV]: Inição JNI padrão: luajava-1.1.dll
[JNIDEV]: JNI Inição padrão: Libluajava-1.1.so
Biblioteca local carregando com sucesso
Resumir
O exposto acima é sobre a breve discussão sobre a embalagem da biblioteca JNI em um arquivo JAR. Espero que seja útil para todos. Os amigos interessados podem se referir a outros tópicos relacionados a Java neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!