sexta-feira, 5 de março de 2010

Criando Jar no Netbeans sem a pasta lib

Olá, povo

Às vezes é ruim utilizar o build do NetBeans para gerar arquivos Jar, uma vez que ele não cria apenas um arquivo, e sim o jar da sua aplicação e uma pasta chamada "lib", contendo os outros .jar que sua aplicação necessita pra rodar. Em alguns casos, principalmente na hora de colocar o sistema em produção, é desejável que o jar gerado contenha em si tudo o que precisa pra funcionar, sem depender de arquivos externos.

Para criar um arquivo Jar único, basta seguir estes passos:

1) Mude para a visão de visualização de arquivos;
2) Localize (e abra ;) o arquivo build.xml;
3) Insira o seguinte trecho de código no final do arquivo, antes da tag </project>


<target name="package-for-store" depends="jar">
<property name="store.jar.name" value="NOME_DO_SEU_PROJETO"/>


<!-- don't edit below this line -->

<property name="store.dir" value="store"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>

<echo message="Packaging ${application.title} 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>


4) Troque, na segunda linha, a string "NOME_DO_SEU_PROJETO" para o nome do seu projeto (que está na segunda linha do "build.xml"; Salve o arquivo;
5) Selecione a opção "Clean and rebuild" (Limpar e construir). Certifique-se que o Netbeans criou a pasta "dist", contendo o jar da sua aplicação e a pasta "lib";
6) Clique com o botão direito sobre o arquivo "build.xml", selecione a opção "Run target" (executar destino), "Other targets" (Outros destinos) e a seguir "package-for-store".

Se tudo der certo (rezar é bom nessas horas), o NetBeans irá gerar uma pasta chamada "store", contendo um único arquivo Jar bonitinho, fofo, meigo e pronto pra ser distribuído por aí :D

É isso, té o/


Fonte

16 comentários:

Oscar jc neto disse...

Ola Thiago!
segui os passos que você falou mas aconteceu um erro:

Target "jar" does not exist in the project "inventario". It is used from target "package-for-store".
FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

estou utilizando netbeans versão 6.7.1

Oscar jc neto disse...

Descobri o problema da minha aplicação, eu estava tentando fazer isso a partir de um projeto web, ou seja, o build gerava um .war =p
em projeto desktop funcionou normal obrigado plea dica!

Anônimo disse...

Cara, parabéns, tava procurando por isso há algum tempo!!!

=)

Pansani disse...

Parabéns!! Funcionou perfeitamente, era o que eu queria..

Muito Obrigado!

Miuhouse BH disse...

Simplesmente Perfeito!!!
Era o que eu precisava mesmo... Vlw!!!

Elias S. disse...

funcionou!!
olha que eu usei hibernate utilizando o BD Mysql.

empacotou e funcionou

viva o Java.....

Atsuki disse...

Obrigado Colega!
Ajudou bastante!

Daniel Krug disse...

Cara, valeu pela postagem, funfou direitinho... na minha máquina. Se executar o .jar em outro micro ou numa máquina virtual não rola o sentimento, ou seja, ele não localiza o banco.

Abraço,
Daniel.

raghyjose disse...

poxa muito bacana estava procurando por isto e achei, graças aos colegas do guj. sensacional. como vc descobriu isto?


gerei alguns jar, sem a lib, se vc quiser conhecer os projetos, manda um email, raghy@ig.com.br

na maioria são jogos. já havia empacotado as imagens, então aquela pasta lib, estava atrapalhando bastante.

Edésio disse...

NOTA 10! Valeu!!

Diego Froes disse...

Segui os passos, porém deu o seguinte msg de erro: ...Trab N-Rainhas\dist\lib does not exist.
FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

O que eu fiz, limpei e construir o projeto, fui na pasta dist, vi q nao gerou a pasta lib, então, criei a pasta lib. Aí gerei a pasta store. Executei o jar gerando, porém as imagens q tem no aplicativo não apareceu. Foi com tivesse retirado todas as imagens. O que pode está dando errado? Poderia me dar um help?!!

raghyjose disse...

entao sem lib nao adianta, seu problema com imagnes de certo não tem nada a ver com a store, pois o dist sem lib, já gera as imagens juntos...
vc tem que conseguir captura-las melhor...
estas usando imageicon, enfim como chamas as imagens, posso procurar e postar um exemplo que uso. raghy@ig.com.br se tu mandar esta parte do código também auxilia.

Antônio disse...

Valew brother! Excelente!

Anônimo disse...

Quando eu crio um único jar usando esse tutorial, todas as jTable param de funcionar. Alguém sabe como resolver? Obrigado.

Anônimo disse...

Muito obrigado pela dica. Funcionou direitinho aqui no meu linux.

valeu!

Anônimo disse...

Valeu cara! Consegui fazer funcionar direitinho aqui no meu linux.

Única coisa a mais que poderia ter nesse post é a explicação das tags xml.

Ai sim ia ficar show!

Valeu!