How do I resolve ClassNotFoundException?
JavaClassClasspathClassnotfoundexceptionJava Problem Overview
I am trying to run a Java application, but getting this error:
java.lang.ClassNotFoundException:
After the colon comes the location of the class that is missing. However, I know that that location does not exist since the class is located elsewhere. How can I update the path of that class? Does it have something to do with the class path?
Java Solutions
Solution 1 - Java
A classpath is a list of locations to load classes from.
These 'locations' can either be directories, or jar files.
For directories, the JVM will follow an expected pattern for loading a class. If I have the directory C:/myproject/classes in my classpath, and I attempt to load a class com.mycompany.Foo, it will look under the classes directory for a directory called com, then under that a directory called mycompany, and finally it will look for a file called Foo.class in that directory.
In the second instance, for jar files, it will search the jar file for that class. A jar file is in reality just a zipped collection of directories like the above. If you unzip a jar file, you'll get a bunch of directories and class files following the pattern above.
So the JVM traverses a classpath from start to finish looking for the definition of the class when it attempts to load the class definition. For example, in the classpath :
C:/myproject/classes;C:/myproject/lib/stuff.jar;C:/myproject/lib/otherstuff.jar
The JVM will attempt to look in the directory classes first, then in stuff.jar and finally in otherstuff.jar.
When you get a ClassNotFoundException, it means the JVM has traversed the entire classpath and not found the class you've attempted to reference. The solution, as so often in the Java world, is to check your classpath.
You define a classpath on the command line by saying java -cp and then your classpath. In an IDE such as Eclipse, you'll have a menu option to specify your classpath.
Solution 2 - Java
Your classpath is broken (which is a very common problem in the Java world).
Depending on how you start your application, you need to revise the argument to -cp
, your Class-Path entry in MANIFEST.MF or your disk layout.
Solution 3 - Java
This is the best solution I found so far.
Suppose we have a package called org.mypackage
containing the classes:
- HelloWorld (main class)
- SupportClass
- UtilClass
and the files defining this package are stored physically under the directory D:\myprogram
(on Windows) or /home/user/myprogram
(on Linux).
The file structure will look like this:
When we invoke Java, we specify the name of the application to run: org.mypackage.HelloWorld
. However we must also tell Java where to look for the files and directories defining our package. So to launch the program, we have to use the following command:
> NOTE: You have to execute the above java
command no matter what your current location is. But this is not the case for javac
. For
> compiling you can even directly go into the directory where you have
> your .java
files and directly execute javac ClassName.java
.
Solution 4 - Java
If you know the path of the class or the jar containing the class then add it to your classpath while running it. You can use the classpath as mentioned here:
on Windows
java -classpath .;yourjar.jar YourMainClass
on UNIX/Linux
java -classpath .:yourjar.jar YourMainClass
Solution 5 - Java
Try these if you use maven. I use maven for my project and when I do mvn clean install
and try to run a program it throws the exception. So, I clean the project and run it again and it works for me.
I use eclipse IDE.
For Class Not Found Exception when running Junit test, try running mvn clean test
once. It will compile all the test classes.
Solution 6 - Java
Basic Generic Question - Simplest Generic Answer ;)
Given the information I will make the assumption that you might be trying a basic approach to coding, building/compiling and running a simple console app like "Hello World", using some simple text editor and some Command Shell.
This error occurs in the fallowing scenario:
..\SomePath>javac HelloWorld.java
..\SomePath>java HelloWorld.class
In other words, use:
..\SomePath>java HelloWorld
P.S. The adding the file extension .class produces the same mistake. Also be sure to have the Java's (JDK/JRE) bin folder in the operating system's Environment Variables's PATH.(Lookup for more details other posts on this) P.P.S Was I correct in my assumption/s?
Solution 7 - Java
If you use maven, check that you have this plugin in your pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<executions>
<!-- Attach the shade goal into the package phase -->
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
It will put your dependency (the exception reason) to your jar.
FYI: this will include all dependencies inflated in the final jar
Solution 8 - Java
To add the location of a class to your classpath via command line simply add -cp
or -classpath
and the location of the class while running it. I.E.
java -cp "c:/location/of/file" YourProgram
Or if you're running an IDE such as eclipse you can right click on the project -> build path -> configure build path
and add the external JAR containing your class to the build path then it should work fine.
Solution 9 - Java
Use ';' as the separator. If your environment variables are set correctly, you should see your settings. If your PATH and CLASSPATH is correct, windows should recognize those commands. You do NOT need to restart your computer when installing Java.
Solution 10 - Java
Add the full path of jar file to the CLASSPATH.
In linux use: export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH"
. Other way worked (without editing the CLASSPATH) was unzipping the jar in the current project folder.
Ways didn't work for me:
-
Using
-cp
option with full path of jar file. -
Using
-cp
with only the name of jar when located in the current folder -
Copying the jar to the current project folder
-
Copying the jar to standard location of java jars (/usr/share/java)
This solution is reported for class com.mysql.jdbc.Driver in mysql-connector-java.5-*.jar, working on linux with OpenJDK version 1.7
Solution 11 - Java
Go up to the top and remove the import statement if there is one, and re import the class. But if that isn't the case do a clean then build. Are you using Netbeans or Eclipse?
Solution 12 - Java
I ran into this as well and tried all of the other solutions. I did not have the .class file in my HTML folder, I only had the .java file. Once I added the .class file the program worked fine.
Solution 13 - Java
-
It could happen if your classpath is not correct
-
Let us posit a serializable class and deserializable class under same projectname. You run the serializable class, creating a serializable object in specific folder. Now you need the desearialized data. In the meantime, if you change the name of the project it will not work. You have to run the serializable class first and then deserialize the file.
Solution 14 - Java
If you are using maven try to maven update all projects and force for snapshots. It will clean as well and rebuilt all classpath.. It solved my problem..
Solution 15 - Java
I just did
1.Invalidate caches and restart
2.Rebuilt my project which solved the problem
Solution 16 - Java
This can happen on Windows after a java update where the old version of the java SDK is missing and a new one is present. I would check if your IDE is using the installed java SDK version (IntelliJ: CTRL + SHIFT + ALT + S)
Solution 17 - Java
I had the same error and it took me a whole day to realize it's a dependency conflict issue:
- I imported two libraries,
A
andB
; - Both
A
andB
depends on another libraryC
, but different versions ofC
. Let's sayA
depends onC 1.0
andB
depends onC 2.0
; B
makes use of a class that only exists inC 2.0
;- However,
A
is "closer" in the dependency tree, so Maven usesC 1.0
for bothA
andB
and doesn't even warn you about this (it's quite astounding to me); - As a result, when
B
tries to use the class that only exists inC 2.0
, aClassNotFoundException
is thrown;
Now the weird thing is: if you navigate the code of B
in your IDE and try to jump to the class that only exists in C 2.0
, it works correctly. C 2.0
is indeed installed and your IDE knows about it, but it's just ignored when running the application.
This has really driven me mad...
I ended up having to add C 2.0
to my pom.xml
so that it can be chosen over C 1.0
.
Please refer to this post for how Maven chooses the closest dependency: https://stackoverflow.com/a/63815140/7438905
You can use mvn dependency:tree
to visualize the dependency tree.
Solution 18 - Java
I was trying to run .jar from C# code using Process
class. The java code ran successfully from eclipse but it doesn't from C# visual studio and even clicking directly on the jar file, it always stopped with ClassNotFoundException:
exception. Solution for my, was export the java program as "Runnable JAR file" instead of "JAR File". Hope it can help someone.
Solution 19 - Java
If you have added multiple **(Third-Party)**libraries and Extends Application class
Then it might occur.
For that, you have to set multiDexEnabled true
and replace your extended Application
class with MultiDexApplication
.
It will be solved.
Solution 20 - Java
It's worth noting that sometimes Java lies about the Class that is causing the problem.
You can get this error if java tries to load class A which depends on class B and class B can't be loaded.
In some circumstances java reports that class A can't be loaded when the problem is B.
From recollection the last time this occurred was when class A includes a static field or a static initializer that loaded class B.
So after checking your class path is correct (I actually dump the full classpath on startup) I then do a binary chop on class A.
By this I mean, I remove half of the code in A.
If it still fails I remove another half and so on until the problem (hopefully goes away).
Solution 21 - Java
In my case the class thrown as class not found exception has properties related to ssl certificates. Close the eclipse and open with as “Run as Administrator” then issue got resolved. As eclipse have issue related permission it will throw such kind of exception.
Solution 22 - Java
I started having this issue after upgrading the "Java Language Support" plugin from Visual Studio Code from version 0.66.0 to 0.67.0.
Downgrading back allowed me to run the same code without any issue.
Solution 23 - Java
If you have moved your project to new machine or importing it from git, then try this.
- Right Click on class > Run as > Run Configuration
- remove main class reference
- Apply > Close
- Now again right click on class > run as java application.
It worked for me.
Solution 24 - Java
I ran the Java code at the Terminal and adding Class Path was solution like this:
> java -cp <JAR file> <JAVA Class file>
for example,
c:\code\prototype-app\target\classes>java -cp ..\prototype-app-1.0-SNAPSHOT.jar com_stree.app.DetectLabels
My runtime environment:
OS: Windows 10
JAVA: 15.0.1
Maven: 3.8.1
Solution 25 - Java
I deleted some unused imports and it fixed the problem for me. You can't not find a Class if you never look for it in the first place.
Solution 26 - Java
sorry i am late to the question, but i will explain it to you in the simplest layman language.
When you type 'javac
Solution 27 - Java
Put all the code in try block then catch exception in a catch block
try
{
// code
}
catch(ClassNotFoundException e1)
{
e1.getmessage();
}