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 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