How to Fix Java NoClassDefFoundError Error
In the Java language, errors are anomalies that mainly occur due to a lack of resources. Additionally, errors cannot be caught at the compile time and occur at run time.
The errors are also called unchecked exceptions. One cannot check if any error can occur or not even the compilation gets done successfully.
The variety of errors that are present under Error
class are AssertionError
, NoClassDefFoundError
, OutOfMemoryError
, etc.
The NoClassDefFoundError
is a sub-type of the Error
class that says or denotes the Java Runtime Environment or (JRE) cannot load the class definition, which was present at the time of compilation but is not available at runtime. The Error
class resides inside the javas.lang
package.
The NoClassDefFoundError
class resides under LinkageError
. The Error
is a type of linkage issue that comes into action or encounters when we do not use proper IDE (Integrated Development Environment) like IntelliJ IDEA, Eclipse, etc., and use the console to run the program.
The IDE’s work in a way that compiles the classes that are dependent on the main class beforehand. But in a console or terminal, it is the responsibility of the user to compile all the dependent classes and then run the main class, thereby reducing the risk of the linkage type error.
Let’s understand the error using a Java code block.
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");
}
}
In the above code block, create a Java class file with the NoClassDefinitionError
name. Save the file with the .java
extension.
Then, open the class in the notepad, copy and paste the code block into the class file. Open a command prompt, and go to the location where the file gets saved.
Run the first command to compile the code block javac NoClassDefinitionError
command.
The command requires the PATH
environment variable to be set by default before using the javac command. Make sure the PATH
variable has java’s bin location already added beforehand.
Else it will give an error as javac gets not recognized as an internal or external command, operable program, or batch file
issue.
The javac command allows the compiler to create a .class
file that is nothing but the byte code version of the java file. This file is easily understandable by Java Virtual machine or JVM to run the program.
Now, reach the location where the .java
file gets saved. It seems easy to locate the .class
file, which gets created after running the javac command. Manually remove the A.class
file from the location.
Try running command java NoClassDefinitionError
.
The java
command internally runs the Java application by loading all the dependent class files and searching for the main method. When it is unable to find the class definition, it shows up runtime exception.
Below is a small code of error block that gets populated when this Error
comes.
Exception in thread "main" java.lang.NoClassDefFoundError
: A at NoClassDefinitionError.(NoClassDefinitionError.java : 3)
Various resolutions to eradicate the problem when we encounter any error is listed below.
- Check for the class name that gets to run is at the exact and desired location.
- Check if
.class
files are present for the java class that one is trying to run. If the class file is not present then, first compile the other class and get the class file to generate. - Check for transitive dependencies and compile the classes that get needed to run the main class file. A->B and B-> C In this case, A is transitive dependent on the C class. The transitive dependency says an indirect relationship that exists among three different files that are functionally dependent on one another.
- Direct use of the IDE environment reduces chances of avoiding
noClassDefFoundError
issues, as the dependency resolution and transitive dependencies will be handled before the actual run. - Examine the stack trace properly, as it gives a proper understanding of where the issue starts populating and its impact in the code-flow from what all places it gets thrown. The stack trace should help in getting the issue resolved.
- Add the location where the Java command runs into the
CLASSPATH
variable. The variable helps locate the path where the class files are to be picked and loaded when the program runs in 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.
LinkedInRelated Article - Java Error
- How to Fix the Error: Failed to Create the Java Virtual Machine
- How to Fix the Missing Server JVM Error in Java
- How to Fix the 'No Java Virtual Machine Was Found' Error in Eclipse
- How to Fix Javax.Net.SSL.SSLHandShakeException: Remote Host Closed Connection During Handshake
- How to Fix the Error: Failed to Create the Java Virtual Machine
- How to Fix Java.Lang.VerifyError: Bad Type on Operand Stack