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

Publicado por Pedro Ferrarezi em 12/06/2012

[ Hits: 13.629 ]

 


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

Convertendo formato de vídeo OGV para AVI

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

Ubuntu 12.04 com Gnome 3 - Tunando a Aparência com Temas e Ferramentas

Extendendo a classe ArrayList para criar listas sem repetição

Como mudar o teclado do Debian em uma máquina virtual configurada em outro SO

Leitura recomendada

Programa para visualizar graficamente sua rede de amizades no Orkut

Evento sobre Java na UFSCar

JDeveloper - Inicializando e alterando o idioma para Português

Netbeans 6 vs OpenSuSE 10.3

Java :: Squirrel-SQL Client

  

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