Como criar um .jar que utilize outro .jar

7 respostas
L

Estou querendo criar um .jar só que uma das classes que eu criei importa org.apache.commons.digester.Digester, que é um .jar.
Em um artigo do Samuel Mota, ele fala que devemos relacioná-los no atributo Class-Path do manifest. Fiz e não funcionau.
Em outro artigo, do Marcos Silva Pereira, ele fala que basta colocarmos em JAVA_HOME\jre\lib\ext que o jdk os reconheceria. Também não deu certo.
Alguem ja fez isto e deu certo?

7 Respostas

jcranky

Nos ajude a te ajudar, nos diga exatamente o que você está fazendo e qual a(s) mensagem(ns) de erro(s) :wink:

L

OK Paulo,
Tenho um arquivo xml e dele devo extrair um relatorio.doc.
Com o eclipse fiz duas classes. Uma classe com a interface grafica e a outra que faz o trabalho de ler o arquivo xml e gerar o .doc. A segunda classe importa org.apache.commons.digester.Digester que é um jar adicionado em libraries, Java Build Path, do Eclipse. Até ai beleza pois funciona perfeitamente.
Só que preciso distribuir esse aplicativo para outras máquinas atraves de uma jar executavel.
O eclipse me da a possibilidade de gerar um jar atraves do Export. Só que ele gera o jar mas quando vou executar dá erro por não encontrar a classse digester, que se encontra em outro jar. Já coloquei os jar’s do digester direto no classpath mas o jdk não as encontra.

L

Paulo, só um detalhe.
Via DOS, descompactei os 4 .jar’s que fazem com com que o digester funcione. com o comando jar cvmf manif Hello.jar Principal.class br\com\tabajara*.class br\com\tabajara2*.class br\com\tabajaraN+1*.class. Consegui criar um jar que funcionar perfeitamente. Só que da um trabalho danado. E qualquer manutenção no código tenho que refazer tudo de novo.
O que eu quero é poder criar um jar que referencie outro jar. De forma que se eu tiver que alterar o código isso seja feita de uma forma simples. Sem que eu tenha que criar na mão, via DOS, uma pancada de diretórios.
Como posso passar o código fonte para vc da uma olhada?

keller

Segue um exemplo, nao esqueça que a ultima linha do seu manifest deve ser em branco…

Manifest-Version: 1.0
Name: NomeDaAplicacao
Main-Class: pacote.da.class.main.classe_main
Class-path: lib\jar_necessario1.jar lib\jar_necessario2.jar
Created-By: Guilherme I. Keller

Sendo que no mesmo nivel do seu JAR Aplicação deve existir uma pasta lib,
com os seus jar’s necessarios.

beleza ? nao conseguindo ou conseguindo posta pra avisa…
até…

L

Eu havia tentado conforme o artigo do Samuel Mota, http://www.guj.com.br/java.artigo.42.3.guj . Só que ele fala para colocar Class-Path nome_do_jar.jar lib\jar1.jar lib\jarN.jar.
Coloquei como vc disse:

Manifest-Version: 1.0 Main-Class: PrincipalRel Classpath: lib\commons-digester-1.3.jar lib\commons-collections-2.1.jar lib\commons-logging-1.0.2.jar lib\commons-beanutils-bean-collections.jar lib\commons-beanutils-core.jar lib\commons-beanutils-1.5.jar e mesmo assim da erro, java.lang.NoClassDefFoundError: org\apache\commons\digester\Digester, ou seja ele não localiza o jar do digester.
Obs: A pasta lib está no mesmo diretório do jar.

keller

Quem sabe você esta esquecendo de algum detalhe…

e dentro do lib os jar’s necessarios

*tente fazer um CTRL+C / CTRL+V do manifest que eu colei de exemplo, mudando as propriedades necessarias, é claro

**nao esqueça que a ultima linha do manifest deve ser em branco!

L
Até que enfim consegui!! Mas só funcionou colocando hifen no ClassPath, ou seja Class-Path.
Manifest-Version: 1.0
Name: Levantamento_Selecao
Main-Class: PrincipalNova
Class-path: Levant_Selecao.jar lib\classes12.jar lib\commons-digester-1.3.jar 

lib\commons-collections-2.1.jar lib\commons-logging-1.0.2.jar 

lib\commons-beanutils-bean-collections.jar lib\commons-beanutils-core.jar 

lib\commons-beanutils-1.5.jar
Created-By: Luiz Ronaldo O. Melo
Valeu pela ajuda pessoal, muito obrigado!
Criado 11 de janeiro de 2005
Ultima resposta 13 de jan. de 2005
Respostas 7
Participantes 3