Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Criar jar executável com dependências (dll's e jar's) empacotados

Olá.

Estou com um projeto que precisa de dependências próprias (que não estão no repositório maven) e algumas dll's para funcionar.

Onde devo colocar estas dependências no projeto para que quando estiver com o jar executável gerado, ele saiba onde as procurar?

Já consegui empacotar com as dll's com o maven, porém ao ser executado ele não as encontra e assim não funciona. Quando coloco o jar numa pasta onde tenha estas dll's extraídas ele funciona.

Então de alguma forma tenho de empacotar o jar com as dll's, e desempacotar para determinada pasta quando for executar. Ou quando for executar, informar de alguma maneira para o jar procurar as dll's dentro dele mesmo.

Já pesquisei de algumas maneiras como fazer isso, mas não encontrei respostas que me servissem.

Grato desde já.

2 respostas

Olá Thiago tudo bem?

Como você está fazendo para buscar as dll's ?

solução!

Achei uma solução.

Para empacotar (para quem não sabe) arquivos dentro de um jar, sejam outras jar's, dll's ou qualquer outro arquivo, primeiramente, estes devem estar na pasta src/main/resources.

Depois deve ser informado no pom.xml quais arquivos desta pasta devem ser empacotados, através da tag resources:

<resources>
        <resource>
            <directory>caminho dos arquivos no projeto</resource>
            <targetPath>caminho dos arquivos no jar empacotado</tagetPath>
        </resource>            
</resources>

Para desempacotar as dll's em determinada pasta, usei uma classe utilitária de terceiros que extrai as dll's na pasta temporária do sistema. Exemplo de uso:

public class HelloJNI {  
    static {   
        try {    
            NativeUtils.loadLibraryFromJar("/resources/libHelloJNI.dll");   
        } catch (IOException e) {
            // This is probably not the best way to handle exception :-)    
            e.printStackTrace();
        }    
    }  

    public native void hello();    
}

Mais informações sobre a classe utilitária: https://github.com/adamheinrich/native-utils

Grato.