Re:Erro log4j: java.lang.NoClassDefFoundError [RESOLVIDO]

3 respostas
H

Olá pessoal.

E vi o [RESOLVIDO] no título mas pra mim não ficou clara a solução.

Estou com o mesmo problema, mas no meu caso estou começando a estudar EJB 3 no GlassFish.

Consigo fazer o Lookup e chamar o método remoto sem problemas usando como retorno uma entidade preenchida com valores hard code.
O segundo teste que estou fazendo é obter uma classe DAO e através dela obter essa mesma entidade com valores hard code para simular uma situação como se eu estive obtendo algo do banco de dados.

Nesse momento aparece o erro:

No classpath está o jar “commons-logging.jar”.

[]'s

3 Respostas

C

Também não. Que que custa postar a explicação?

V

Boa noite!
Estou passando por uma situação que "quase nunca acontece" (ho-ho-ho). Tenho uma aplicação que roda perfeitamente em homologação, mas quando chega em produção acontece uma Exception:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Layout at org.apache.commons.logging.impl.Log4jFactory.getInstance(Log4jFactory.java:140) at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:253) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:382) at br.com.gov.nfe.consumer.ConsumerMonitor.(ConsumerMonitor.java:46) 1
Aparentemente é um erro de classpath, mas o MANIFEST.MF não deixa mentir:
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.0 Created-By: 1.5.0_09-b03 (Sun Microsystems Inc.) Main-Class: br.com.gov.nfe.consumer.ConsumerMonitor Class-Path: lib/dom4j-1.6.1.jar lib/commons-io-1.3.1.jar lib/commons-f ileupload-1.2.jar lib/commons-lang-2.3.jar lib/jaxen-1.1.1.jar lib/co mmons-collections-3.2.jar lib/commons-codec-1.3.jar lib/log4j-1.2.13. jar lib/commons-logging-1.1.jar lib/activation.jar lib/mail.jar lib/m ailapi.jar lib/smtp.jar lib/ojdbc14.jar lib/receptor.jar lib/joda-tim e-1.5.2-updated-2008.jar lib/com.ibm.mq.jar lib/javaee.jar lib/webser vices-rt.jar

O jar do log4j está nas dependências.

A linha que dá o erro é:

public class ConsumerMonitor {

    private static Log log = LogFactory.getLog(ConsumerMonitor.class); //linha 46

...

O SO é um linux. A chamada no script é assim:

$JAVA_HOME/bin/java -jar /tmp/teste/consumer.jar

Onde JAVA_HOME é /usr/local/jdk1.5.0_15

Alguém tem alguma idéia do que pode ser?

Alguns colegas gujeiros já passaram por isso:
http://www.guj.com.br/posts/list/21868.java#115779

Valeu!

V

Ufa! O problema foi resolvido!

Em resumo tive alguns problemas de diferenças entre ambiente de homologação e produção. No que se refere ao log, segue um breve relato:

Eu sempre utilizava log4j em conjunto com commons-logging quase que mecanicamente. Esse problema me fez entender quando utilizá-lo!

When should I use commons-logging? Answer: http://wiki.apache.org/jakarta-commons/Logging/FrequentlyAskedQuestions

Think again before adopting the commons-logging API
http://www.qos.ch/logging/thinkAgain.jsp

Uma alternativa foi tirar o classpath do MANIFEST e explicitá-lo na linha de comando. Funcionou!

Um colega com um erro semelhante: http://www.javafree.org/viewtopic.jbb?t=852357

Criado 21 de julho de 2009
Ultima resposta 14 de jul. de 2009
Respostas 3
Participantes 3