Corrigir erro Java NoClassDefFoundError

Rashmi Patidar 12 outubro 2023
Corrigir erro Java NoClassDefFoundError

Na linguagem Java, os erros são anomalias que ocorrem principalmente por falta de recursos. Além disso, os erros não podem ser detectados no tempo de compilação e ocorrem no tempo de execução.

Os erros também são chamados de exceções não verificadas. Não se pode verificar se pode ocorrer algum erro ou nem mesmo a compilação é feita com sucesso.

A variedade de erros que estão presentes na classe Error são AssertionError, NoClassDefFoundError, OutOfMemoryError, etc.

O NoClassDefFoundError é um subtipo da classe Error que diz ou denota que o Java Runtime Environment ou (JRE) não pode carregar a definição de classe, que estava presente no momento da compilação, mas não está disponível no tempo de execução. A classe Error reside dentro do pacote javas.lang.

A classe NoClassDefFoundError reside em LinkageError. O Erro é um tipo de problema de ligação que entra em ação ou é encontrado quando não usamos o IDE (Ambiente de Desenvolvimento Integrado) adequado, como IntelliJ IDEA, Eclipse, etc., e usamos o console para executar o programa.

O IDE funciona de forma a compilar previamente as classes que são dependentes da classe principal. Mas em um console ou terminal, é responsabilidade do usuário compilar todas as classes dependentes e então executar a classe principal, reduzindo assim o risco de erro de tipo de ligação.

Vamos entender o erro usando um bloco de código Java.

public class NoClassDefinitionError {
  public static void main(String[] args) {
    A a = new A();
    a.show();
  }
}

class A {
  void show() {
    System.out.println("In class A");
  }
}

No bloco de código acima, crie um arquivo de classe Java com o nome NoClassDefinitionError. Salve o arquivo com a extensão .java.

Em seguida, abra a classe no bloco de notas, copie e cole o bloco de código no arquivo da classe. Abra um prompt de comando e vá para o local onde o arquivo foi salvo.

Execute o primeiro comando para compilar o comando javac NoClassDefinitionError do bloco de código.

O comando requer que a variável de ambiente PATH seja definida por padrão antes de usar o comando javac. Certifique-se de que a variável PATH tenha o local de armazenamento de java já adicionado de antemão.

Caso contrário, ocorrerá um erro, pois o javac não é reconhecido como um problema de comando interno ou externo, programa operável ou arquivo em lote.

O comando javac permite que o compilador crie um arquivo .class que nada mais é do que a versão em código de bytes do arquivo java. Este arquivo é facilmente compreensível pela máquina virtual Java ou JVM para executar o programa.

Agora, alcance o local onde o arquivo .java foi salvo. Parece fácil localizar o arquivo .class, que é criado após a execução do comando javac. Remova manualmente o arquivo A.class do local.

Tente executar o comando java NoClassDefinitionError.

O comando java executa internamente o aplicativo Java carregando todos os arquivos de classe dependentes e procurando o método main. Quando ele não consegue encontrar a definição de classe, ele mostra uma exceção de tempo de execução.

Abaixo está um pequeno código de bloco de erro que é preenchido quando este Erro ocorre.

Exception in thread "main" java.lang.NoClassDefFoundError
    : A at NoClassDefinitionError.(NoClassDefinitionError.java : 3)

Várias soluções para erradicar o problema quando encontramos algum erro estão listadas abaixo.

  • Verifique se o nome da classe que deve ser executada está no local exato e desejado.
  • Verifique se os arquivos .class estão presentes para a classe java que se está tentando executar. Se o arquivo de classe não estiver presente, primeiro compile a outra classe e obtenha o arquivo de classe a ser gerado.
  • Verifique as dependências transitivas e compile as classes necessárias para executar o arquivo de classe principal. A-> B e B-> C Neste caso, A é transitivo dependente da classe C. A dependência transitiva indica um relacionamento indireto que existe entre três arquivos diferentes que são funcionalmente dependentes um do outro.
  • O uso direto do ambiente IDE reduz as chances de evitar problemas noClassDefFoundError, pois a resolução da dependência e as dependências transitivas serão tratadas antes da execução real.
  • Examine o rastreamento de pilha corretamente, pois ele fornece uma compreensão adequada de onde o problema começa a ser preenchido e seu impacto no fluxo de código em todos os lugares em que ele é gerado. O rastreamento de pilha deve ajudar a resolver o problema.
  • Adicione o local onde o comando Java é executado na variável CLASSPATH. A variável ajuda a localizar o caminho onde os arquivos de classe devem ser selecionados e carregados quando o programa é executado no Java Runtime Environment.
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

Artigo relacionado - Java Error