Usar jar externo

7 respostas
kaabah

Olá juggers…

Estou com um problema… tenho um aplicativo que utiliza 5 arquivos .jar externos a aplicação.

Todos eles estao em uma pasta definida. (C:\Program Files\Shared)

Fiz o sistema utilizando NetBeans.

Ao gerar o .jar do meu aplicativo e rodar fora do netbeans, ocorre um erro pois ele não encontra algumas classes que estão nos arquivos .jar da pasta citada acima.

como seria, pela linha de comando para rodar esse aplicativo?
Tentei utilizando java -cp “C:\Program Files\Shared\nomeDoJar.jar; C:\Program Files\Shared\nomeDoOutroJar.jar” -jar Meuaplicativo.jar. O erro continua…

Teria uma forma de eu indicar só o nome da pasta ao invés de ter que declarar cada jar que eu estou usando?

A sintaxe acima está correta?!

abração pessoal…

7 Respostas

K

Dica: Crie um arquivo de manifesto para o jar do seu aplicativo. Nele vc define os dados do seu arquivo jar, como dependencias de outras bilbiotecas.

Coloque o caminho das bibliotecas necessarias no atributo Class-Path do seu manifesto.

Tem um tutorial aqui no guj que ira te ajudar a criar esse arquivo:
http://www.guj.com.br/java.tutorial.artigo.42.1.guj

Isso deve resolver.

kaabah

já olhei esse tutorial… a minha duvida é qts classpath meu manifest pode ter…

ele está assim:

Name: br/offline

Class-Path: “C:/Program Files/messageService.jar”
Class-Path: “C:/Program Files/Shared.jar”
Class-Path: “C:/Program Files/subscription.jar”
Class-Path: “C:/Program Files/widgets.jar”
Class-Path: “C:/Program Files/workflow.jar”
Class-Path: “C:/Program Files/xalan.jar”
Class-Path: “C:/Program Files/xercesImpl.jar”
Class-Path: “C:/Program Files/xforms.jar”
Class-Path: “C:/Program Files/XformsCommon.jar”
Class-Path: “C:/Program Files/xml-apis.jar”
Class-Path: “C:/Program Files/xmlParserAPIs.jar”
Class-Path: “C:/Program Files/xtrim-api.jar”
Class-Path: “C:/Program Files/ll-MB.jar”
Class-Path: “C:/Program Files/bpmutil.jar”
Class-Path: “C:/Program Files/bsf.jar”
Class-Path: “C:/Program Files/castor-0.9.5.2.jar”
Class-Path: “C:/Program Files/ci.jar”
Class-Path: “C:/Program Files/Dcollaboration.jar”
Class-Path: “C:/Program Files/commons-jxpath-1.1.jar”
Class-Path: “C:/Program Files/ctsTransform.jar”
Class-Path: “C:/Program Files/ctsTransformImpl.jar”

dsfextreme

kaabah:
já olhei esse tutorial… a minha duvida é qts classpath meu manifest pode ter…

ele está assim:

Name: br/offline

Class-Path: “C:/Program Files/messageService.jar”
Class-Path: “C:/Program Files/Shared.jar”
Class-Path: “C:/Program Files/subscription.jar”
Class-Path: “C:/Program Files/widgets.jar”
Class-Path: “C:/Program Files/workflow.jar”
Class-Path: “C:/Program Files/xalan.jar”
Class-Path: “C:/Program Files/xercesImpl.jar”
Class-Path: “C:/Program Files/xforms.jar”
Class-Path: “C:/Program Files/XformsCommon.jar”
Class-Path: “C:/Program Files/xml-apis.jar”
Class-Path: “C:/Program Files/xmlParserAPIs.jar”
Class-Path: “C:/Program Files/xtrim-api.jar”
Class-Path: “C:/Program Files/ll-MB.jar”
Class-Path: “C:/Program Files/bpmutil.jar”
Class-Path: “C:/Program Files/bsf.jar”
Class-Path: “C:/Program Files/castor-0.9.5.2.jar”
Class-Path: “C:/Program Files/ci.jar”
Class-Path: “C:/Program Files/Dcollaboration.jar”
Class-Path: “C:/Program Files/commons-jxpath-1.1.jar”
Class-Path: “C:/Program Files/ctsTransform.jar”
Class-Path: “C:/Program Files/ctsTransformImpl.jar”

Qual versão do NetBeans que vc está usando ?

kaabah

5.0

K

kaabah:
já olhei esse tutorial… a minha duvida é qts classpath meu manifest pode ter…

Pode ter vários, quantos forem necessários, mas a declaração correta seria assim:

Class-Path: C:/Program Files/messageService.jar C:/Program/Shared.jar C:/Program Files/subscription.jar ...

ou seja não faça uma linha Class-Path para cada jar e sim uma linha só e cada jar separa por um espaço.

A melhor prática seria dentro da sua aplicação (mesmo sendo desktop) criar uma pasta lib e colocar seus jar ali dentro para falicitar a distribuição do seu aplicativo.

Ficaria algo como:

Class-Path: lib/messageService.jar lib/Shared.jar lib/subscription.jar ...

Funcionaria corretamente.

kaabah

Entendi… li num artigo também que “Class-Path:” só aceita caminhos relativos… Como vc falou para fazer… acho que a saida vai ser essa mesmo…

Valeu as dicas aí…

abração!

marthian_2

Pessoal ta dando problema com o meu tb.
eu fiz o seguinte manifest:

Manifest-Version: 1.0
Main-Class: com.marcianogoncalves.agenda.graficos.Agenda
Class-Path: /WEB-INF/lib/hibernate3.jar /WEB-INF/lib/jta.jar /WEB-INF/lib/antlr-2.7.6.jar /WEB-INF/lib/asm.jar /WEB-INF/lib/c3p0-0.9.1-pre6.jar /WEB-INF/lib/cglib-2.1.jar /WEB-INF/lib/commons-collections-2.1.1.jar /WEB-INF/lib/commons-logging-1.0.4.jar /WEB-INF/lib/dom4j-1.6.jar /WEB-INF/lib/hsqldb.jar

So que da o seguinte erro:

Exception in thread AWT-EventQueue-0 java.lang.NoClassDefFoundError: org/hiber

nate/Session

at com.marcianogoncalves.agenda.bo.AgendaBO.(AgendaBO.java:24)

at com.marcianogoncalves.agenda.graficos.Agenda$6.actionPerformed(Agenda

.java:696)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour

ce)

at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

Alguem pode me ajudar??

Criado 10 de julho de 2006
Ultima resposta 1 de nov. de 2007
Respostas 7
Participantes 4