Srs.
estou com o seguinte problema:
tenha a seguinte estrutura para meu projeto:
Sistema
|
+---- br
+---- com
+---- giroflex
+----apl
+---- (varios .class)
+---- lib
+---- (varios jar)
Muito bem. Eu consegui gerar um JAR incluindo todos esses diretorios, inclusive no arquivo MANIFEST esta sendo informado no item Class-Path o seguinte: /lib/log4j-1.2.13.jar /lib/commons-logging-1.1.jar …
O que acontece é que quando coloco o jar em um diretório da rede e tento executa-ló atráves do comando java -jar .jar ele apresenta uma mensagem de erro informando que não localizou as classes referentes a rotina de log:
Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
Acontece que se eu copiar no mesmo diretorio em que esta o JAR a pasta LIB da estrutura descrita acima a aplicação funciona normalmente. O que consegui perceber é que ele esta procurando os JAR´s de log ou mesmo o driver JDBC fora do .jar. Será que estou comendo bola na geração do JAR ou falta alguma outra coisa. Já abrir o JAR é todos os arquivos que seriam necessarios , JAR´S e etc.
Agradeço desde já.
Alexandre.
EDIT - Se precisar mostrar código ou texto que respeita o espaçamento, use os tags [ code ]. É fácil, basta usar os botõezinhos [ code ]
Segue o manifest:
Manifest-Version: 1.0
Created-By: Alexandre Martins
Main-Class: br.com.giroflex.apl.MonitorFechamento
Class-Path: /lib/log4j-1.2.13.jar /lib/commons-logging-1.1.jar /lib/commons-logging-adapters-1.1.jar /lib/commons-logging-api-1.1.jar /lib/sqljdbc_1.0/enu/sqljdbc.jar
crie o arquivo .jar utilizando a seguinte linha de comando (dentro do diretorio Sistema)
jar cvfm nomeArquivo.jar MANIFEST.MF br lib
e tire essas barras antes dos caminhos do Class-Path: exemplo, onde tem /lib/log4j-1.2.13.jar, utilize lib/log4j-1.2.13.jar
tb coloque o . (ponto) no seu Class-Path
Soares,
olha a estrutura do Jar gerado:
META-INF/
META-INF/MANIFEST.MF
br/
br/com/
br/com/giroflex/
br/com/giroflex/apl/
br/com/giroflex/apl/BigDate.class
br/com/giroflex/apl/ColorRenderer.class
br/com/giroflex/apl/com/
br/com/giroflex/apl/com/mindprod/
br/com/giroflex/apl/com/mindprod/common11/
br/com/giroflex/apl/ConexaoBD.class
br/com/giroflex/apl/ConfiguracaoBD.class
br/com/giroflex/apl/DataUtil.class
br/com/giroflex/apl/ListaModuloDiario.class
br/com/giroflex/apl/ListaModulosMensal.class
br/com/giroflex/apl/log4j.xml
br/com/giroflex/apl/MonitorFechamento$1.class
br/com/giroflex/apl/MonitorFechamento$2.class
br/com/giroflex/apl/MonitorFechamento$3.class
br/com/giroflex/apl/MonitorFechamento$4.class
br/com/giroflex/apl/MonitorFechamento$5.class
br/com/giroflex/apl/MonitorFechamento.class
br/com/giroflex/apl/simplelog.properties
br/com/giroflex/apl/StringTools.class
lib/
lib/commons-logging-1.1.jar
lib/commons-logging-adapters-1.1.jar
lib/commons-logging-api-1.1.jar
lib/log4j-1.2.13.jar
lib/sqljdbc_1.0/
lib/sqljdbc_1.0/enu/
lib/sqljdbc_1.0/enu/sqljdbc.jar
image/
image/button_green.jpg
image/button_red.jpg
image/button_yellow.jpg
image/Thumbs.db
log/
log/giroflex.log
Olha o Manifest:
Manifest-Version: 1.0
Class-Path: . lib/log4j-1.2.13.jar lib/commons-logging-1.1.jar lib/com
mons-logging-adapters-1.1.jar lib/commons-logging-api-1.1.jar lib/sql
jdbc_1.0/enu/sqljdbc.jar
Created-By: Alexandre Martins
Main-Class: br.com.giroflex.apl.MonitorFechamento
Ai copio o Jar gerado para um diretório diferente, por exemplo C:\ e executo o comando java -jar aplicacao.jar e é apresentada a seguinte mensagem de erro:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at br.com.giroflex.apl.MonitorFechamento.<clinit>(MonitorFechamento.java:91)
Mas seu eu deixar o Jar na pasta do sistema ele funciona.
Alexandre.
o problema eh o seguinte: a pasta lib nao pode estar dentro do seu jar, mas sim fora…
qdo for distribuir seu programa, ele será composto do seu arquivo .jar adicionado da pasta lib.
caso queira colocar tudo em um so arquivo jar vc deve descompactar os arquivos .jar (tipo o lib/commons-logging-api-1.1.jar na) que for utilizar, e adicionar os diretorios descompactados (ex: org/apache/commons/logging/LogFactory) no seu .jar
Entendeu ???
Soares,
muito obrigado, assim funcionou.
Alexandre.