Organizando bibliotecas .jar + projeto NetBeans em único arquivo .jar

Publicado por Pedro Ferrarezi em 12/06/2012

[ Hits: 13.593 ]

 


Organizando bibliotecas .jar + projeto NetBeans em único arquivo .jar



Recentemente tive um problema com a velha e boa pasta /lib, que o NetBeans cria na pasta do projeto sempre que adicionamos ao nosso projeto alguma biblioteca em forma de arquivo .jar, como é o caso dos drivers JDBC.

A princípio parece uma boa prática de organização, deixar separadas as bibliotecas da aplicação principal, pois as bibliotecas na maioria das vezes são feitas por terceiros. E o projeto é uma aplicação do programador que as está usando, sendo ainda esta aplicação muitas vezes proprietária, e as bibliotecas na maioria das vezes, distribuídas sob código GPL, Free etc.

Porém surgem problemas nesta prática de separar as bibliotecas da aplicação principal. Por exemplo, em caso de atualizações mal sucedidas, usuários 'mexelões', problemas de política de organizações que desejam que sua aplicação seja um único arquivo ".jar", entre outros casos que causam perda de tempo com suporte e manutenção.

Até mesmo alguns, como solução precária, abrem o ".jar" do projeto com um compactador/descompactador de arquivos ".zip" e 'jogam' as bibliotecas dentro dele 'na mão'. Mas além de não ser muito inteligente, esta 'solução' gasta tempo, pois toda vez que o projeto for recompilado, será necessário fazer isso novamente.

Por isso resolvi pesquisar e acabei encontrando soluções para evitar isso, e estou deixando a que mais me apraz: modificar o arquivo "build.xml" do projeto do NetBeans.

Segue abaixo o procedimento, que é simples e rápido:

Com seu projeto aberto e a(s) biblioteca(s) ".jar" adicionadas à ele, e tudo 'funcionando' devidamente, vá na aba 'arquivos' do "project inspector". Ou edite o arquivo "build.xml", que fica no diretório do seu projeto e coloque o código abaixo imediatamente antes da tag '</project>', que é a última tag do arquivo "build.xml":

<!-- Tags que criam um único JAR que tem todas as bibliotecas nele, no diretório 'store' -->  
    <target name="-post-jar">  
        <property name="store.jar.name" value="nome-da-minha-app"/> <!-- <-coloque o nome do seu .jar nessa tag -->    
        <property name="store.dir" value="store"/>  
        <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>    
        <echo message="Packaging ${store.jar.name} into a single JAR at ${store.jar}"/>  
        <delete dir="${store.dir}"/>  
        <mkdir dir="${store.dir}"/>    
        <jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">  
            <zipgroupfileset dir="dist" includes="*.jar"/>  
            <zipgroupfileset dir="dist/lib" includes="*.jar"/>  
            <manifest>  
                <attribute name="Main-Class" value="${main.class}"/>                  
            </manifest>  
        </jar>  
        <zip destfile="${store.jar}">  
            <zipfileset src="${store.dir}/temp_final.jar"  
            excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>  
        </zip>  
        <delete file="${store.dir}/temp_final.jar"/>  
    </target>

Após isso, salve e feche o arquivo, e mande limpar e compilar o projeto.

Será criado o diretório "store" dentro do diretório do seu projeto com o arquivo ".jar", conforme o nome que você colocou na terceira linha do código acima.

Este arquivo tem todas as bibliotecas ".jar" adicionadas ao projeto incorporadas a ele, é a aplicação Java pronta para distribuir.

Espero ter ajudado, abraço a todos.

Outras dicas deste autor

Debian/Ubuntu - Conectando banco MySQL via rede com Java

Cálculo do desvio padrão no LibreOffice

Sublime Text Editor 2 - Instalando e integrando no Ubuntu 12.04

Se o LAMP (Linux, Apache, MySQL e PHP) não funcionar no Debian

Montando um servidor de remote desktop com NX Server

Leitura recomendada

Setando o ícone de um JFrame de Java

Java no Ubuntu - Atualização para quem instalou à moda antiga

Programa para visualizar graficamente sua rede de amizades no Orkut

Mono suporta Java

Empresa desenvolve CRM que funciona em Linux

  

Comentários
[1] Comentário enviado por rony_souza em 12/06/2012 - 14:46h

Muito fera essa dica!

vlw abrass.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts