Eclipse - java.lang.ClassNotFoundException

JavaEclipseExceptionMaven 2

Java Problem Overview


When trying to start my JUnit-Test out of Eclipse, I get a "ClassNotFoundException". When running "mvn test" from console - everything works fine. Also, there are no problems reported in Eclipse.

My project structure is the following:

  • parent project (pom-packaging)
  • Web project (war-packaging - my JUnit-test is in here)
  • Flex project
  • Configuration project

edit: How can the class not be found? It's a simple HelloWorld-Application with no special libraries.

Here's my JUnit's run-configuration: alt text


Testclass (but as I said; it doesn't work with a simple HelloWorld either...):

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import biz.prognoserechnung.domain.User;
import biz.prognoserechnung.domain.UserRepository;
import biz.prognoserechnung.domain.hibernate.UserHibernateDao;

public class UserDaoTest {
/**
 * the applicationcontext.
 */
private ApplicationContext ctx = null;

/**
 * the user itself.
 */
private User record = null;

/**
 * Interface for the user.
 */
private UserRepository dao = null;

@Before
public void setUp() throws Exception {
String[] paths = { "WEB-INF/applicationContext.xml" };
ctx = new ClassPathXmlApplicationContext(paths);
dao = (UserHibernateDao) ctx.getBean("userRepository");
}

@After
public void tearDown() throws Exception {
dao = null;
}

@Test
public final void testIsUser() throws Exception {
Assert.assertTrue(dao.isUser("John", "Doe"));
}

@Test
    public final void testIsNoUser() throws Exception {
	Assert.assertFalse(dao.isUser("not", "existing"));
        Assert.assertFalse(dao.isUser(null, null));
        Assert.assertFalse(dao.isUser("", ""));
    }
}

Java Solutions


Solution 1 - Java

I've come across that situation several times and, after a lot of attempts, I found the solution.

Check your project build-path and enable specific output folders for each folder. Go one by one though each source-folder of your project and set the output folder that maven would use.

For example, your web project's src/main/java should have target/classes under the web project, test classes should have target/test-classes also under the web project and so.

Using this configuration will allow you to execute unit tests in eclipse.

Just one more advice, if your web project's tests require some configuration files that are under the resources, be sure to include that folder as a source folder and to make the proper build-path configuration.

Hope it helps.

Solution 2 - Java

Carlos approach helped! https://stackoverflow.com/questions/1052978/eclipse-java-lang-classnotfoundexception/1062435#1062435

Try to check the classpath of the junit run configuration:

  1. Open your run configurations
  2. Click on the jUnit-Test you want to start
  3. go to the classpath tab
  4. Try to add a folder (click on user entries, click on advanced, click on add folders, click on ok and search the outputfolder for your test classes(those you find under projektproperties java build path, source))

works for me.

Solution 3 - Java

your build classpath is correct, which is why you can compile. the classpath for your JUnit needs to be checked. go to the Run menu and choose 'open run dialog.' in there you should see a tree on the left with JUnit as an option. open that node and find and select your test. on the right pane you will see a tab for classpath. take a look to ensure that your class that the test is trying to instantiate would be found.

edit:

this seems to be an issue with maven and its behavior after a release changed the default Eclipse output folders. i have seen solutions described where

  • placing maven into the bootclasspath ABOVE the jre works, or
  • running mvn clean test does the trick or
  • refreshing all of your eclipse projects, causing a rebuild fixes the problem
  • going to your project and selecting Maven->Update Configuration solve the problem

with the first three, there were reports of the issue recurring. the last looks best to me, but if it doesnt work, please try the others.

here and here is some info

Solution 4 - Java

Enabling [x] Use temporary JAR to specify classpath (to avoid classpath length limitations) inside the Classpath tab of the Run configuration did the trick for me.

If your project is huge and you have lots of dependencies from other sibling projects and maven dependencies, you might hit the classpath length limitations and this seems to be the only solution (apart from making the directory to you local maven repo shorter (ours already starts at c:/m2)

enter image description here

Solution 5 - Java

The problem might be missing the class file in your build folder. One solution is clean the project and rebuild it.

Solution 6 - Java

There are many convoluted suggestions here.

I've encountered this problem multiple times with Maven projects after moving resources around by drag 'n' drop, or performing refactoring of class names.

If this occurs, simply copy (not move) the problem Test Case (.java) via terminal/file browser to another location, right-click -> Delete in Eclipse and choose to delete on disk when given the option, move/copy the copied file to the original file location, then select your project in Eclipse and press F5 to refresh resources.

This is quick and easy to do, and has fixed the problem permanently for me every time.

Solution 7 - Java

This was my solution to the problem. Of course, many things can cause it to occur. For me it was that Maven2 (not the plugin for Eclipse) was setting the eclipse profile up to use a different builder (aspectJ) but I did not have the plugin in eclipse./

http://rbtech.blogspot.com/2009/09/eclipse-galileo-javalangclassnotfoundex.html

Cheers Ramon Buckland

Solution 8 - Java

Sachin's right: Even with correct class path, the problems tab will show that some dependency or the Resource/project has error that needs to be fixed in order for maven to automatically build and create classes when you create or make a change in your test class.

"Hi,

Its very Old Jul (which year) but I had the same problem .

Actual issue found that eclipse was not able to generate class file for the java file , classpath was proper.

See the problem tab and check if your project is missing something/file. you can create a new proj and add files one by one and build them until it stops compiling and creating classes ( check the workspace/proj/bin/package/ folder for classes )

its wierd but true , ecplise was failing in compliation because 4 of 20 java files were using a single image which was missing. and as result none of the java file was compiled .

CLASSPATH is not a issue here."

Solution 9 - Java

We had the exact exception (using SpringSource Tools, tomcat, on Win7) and the cause was that we had refactored a filename (renamed a file) from SubDomain.java to Subdomain.java (D vs d) and somehow it collided though SpringSource was showing the new name Subdomain.java. The solution was to delete the file (via SpringSource) and create it again under the name Subdomain.java and copy-pasting its former content. Simple as that.

Solution 10 - Java

I had the exact same problem but I figured it out! Go to your project file and right click on it, then click Refresh or hit F5. Then try and run it. If it still doesn't work then just forget it, as I had the EXACT same problem and it just means you version of Eclipse is garbage.

Solution 11 - Java

JUnit test from inside eclipse gave me also NoClassDefFoundError. Running 'mvn clean test' from command line gave me following error on several jars: invalid LOC header (bad signature) Deleting these jars from local m2 repository and running 'mvn clean test' again solved my problem.

Solution 12 - Java

click on project->properties->Java build path->Source and check each src folder is still valid exist or recently removed. Correct any missing path or incorrect path and rebuild and run the test. It will fix the problem.

Solution 13 - Java

All I did was Properties -> Java Build Path -> Order and Export -> Enabled all unchecked boxes -> moved Junit all the way up

Solution 14 - Java

Tried

Link : [here][1]

Open your run configurations
Click on the jUnit-Test you want to start
go to the classpath tab
Try to add a folder (click on user entries, click on advanced, click on add folders,click on ok and search the outputfolder for your test classes(those you find under projektproperties java build path, source))

worked after

Maven 2 LifeCycle >> test

Solution 15 - Java

I had tried all of the solutions on this page: refresh project, rebuild, all projects clean, restart Eclipse, re-import (even) the projects, rebuild maven and refresh. Nothing worked. What did work was copying the class to a new name which runs fine -- bizarre but true.

After putting up with this for some time, I just fixed it by:

  1. Via the Run menu
  2. Select Run Configurations
  3. Choose the run configuration that is associated with your unit test.
  4. Removing the entry from the Run Configuration by pressing delete or clicking the red X.

Something must have been screwed up with the cached run configuration.

Solution 16 - Java

I had the same problem. All what I did was,

i). Generated Eclipse artifacts

mvn clean eclipse:eclipse

ii). Refresh the project and rerun your junit test. Should work fine.

Solution 17 - Java

I solve that Bulit path--->libraries--->add library--->Junit check junit4

Solution 18 - Java

Usually this problem occurs while running java application java tool unable to find the class file.

Mostly in maven project we see this issue because Eclipse-Maven sync issue. To solve this problem :Maven->Update Configuration

Solution 19 - Java

I suggest trying adding this to the VM arguments;

-verbose:class -verbose:module -Xdiag

Then you can debug it from Eclipse which should print out some message like;

java.lang.ClassNotFoundException: org.adligo.somewhere.Foo
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:398)
	at java.base/sun.launcher.LauncherHelper.loadMainClass(LauncherHelper.java:760)
	at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:655)

From this you can set a breakpoint on LancherHelper.java 760 to debug the Eclipse Lanucher itself. In my case I noticed that user classpath appeared to be null, even though I have many jars in it in the Lanuch config.

Solution 20 - Java

Well, you can solve this problem basically by creating a new project.

  1. Close the project (save the code in another folder on your computer).
  2. Create a new project (add a new final directory and do not leave the default directory selected).
  3. Remake your previous project adding the code saved before.

This happens because probably you created a project and didn't select a directory/folder or something like that. I hope had helped you!

Solution 21 - Java

I was hit with this issue also and was able to come up with a sufficient solution for my case. If your Eclipse project has a .classpath file in your project root (see it in Navigator view instead of Package Explorer view), be sure that your Maven classpathentry appears prior to your JRE Container classpathentry.

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>

If your project does not have a .classpath file, you can edit your project's Java Build Path to switch the Order and Export. If your project has the .classpath file and you only change your ordering in the Java Build Path, you will see that the ordering is not impacted and the issue will continue to occur.

And a project->clean never hurts things after you make the change.

Solution 22 - Java

Make sure your test launch configuration does NOT contain the following lines, OR try enabling automated Maven dependency management.

<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.classpathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.sourcepathProvider"/>

Solution 23 - Java

Please point to correct JDK from Windows > Preferences > Java > Installed JRE.

Do not point to jre, point to a proper JDK. I pointed to JDK 1.6U29 and refreshed the project.

Hereafter, the issue is gone and jUnit Tests are working fine.

Thanks,
-Tapas

Solution 24 - Java

I've run into a same error in Eclipse recently, i.e., the Eclipse IDE couldn't find the Unit test class no matter how I change the configurations. Learning from the previous posts here and in other web sites, I've double checked and triple checked the classpath and source info, and move up and down the source folder and libraries, in both the "Run Configuration" and the "Java Build Path" config windows, and I've also cleaned the Project and rebuilt it, but none of the tricks work for me. The specific Java project is an old ANT compiled project and have lots of jars included in Eclipse library.

Then, I changed the unit test class to add a main() method and right click it to "Run As" a Java Application instead of JUnit test, and suddenly, Eclipse seems to wake up and identified the class correctly. Afterwards, I switched it back to a Unit test application, and it is still working.

This seems to be a bug in Eclipse, I am guessing the large number of libraries (>260) may confused the JVM's ability to locate my JUnit class.

Solution 25 - Java

I tried everything I read in this long post and, incredibly, what worked for me was, rather than clicking on the test class and selecting Run as JUnit test, clicking on the test method and running as JUnit test. I have no idea why?

Solution 26 - Java

Deleting the project from eclipse (Not from hard disk) which in a way is cleaning the workspace and reimporting the project into eclipse again worked for me.

Solution 27 - Java

Changing the order of classpath artifacts in the Java Build Path resolved it for me.

  1. Right Click on the project and go to Project Build path.
  2. Go to, Order and Export tab and move the JRE system library to after the sources.

This should fix it.

Solution 28 - Java

JUnit 4.4 is not supported by the JMockit/JUnit integration. Only versions 4.5 or newer are supported that.

Solution 29 - Java

while running web applications Most of us will get this Exception. When you got this error you have place .class files in proper folder.

In web applications all .class files should sit in WEB-INF\Classes folder. if you are running web app in Eclipse please follow the steps

Step 1: Right click on Project folder and Select Properties Step 2: Click on "Java Build Path" you will see different tabs like "source" , "projects", "libraries" etc Step 3: select Source folder. under this you will see your project details Step 4: in the "Source" folder you will see Default Output Folder option. here you have to give the classes folder under WEB-INF. just give the path like projectname/WebContent/WEB-INF/classes the structure depends on your application please do remember here you no need to create "classes" folder. Eclipse will create it for you. Step 5: click on "OK" and do the project clean and Build. that's it your app will run now.

Solution 30 - Java

I have see Eclipse - java.lang.ClassNotFoundException when running junit tests. I had deleted one of the external jar files which was added to the project. After removing the reference of this jar file to the project from Eclipse. i could run the Junit tests .

Solution 31 - Java

Go To Build Path -> Source and toggle to Yes option "Ignore Optional Compile Problems" for all source folders.

Solution 32 - Java

I faced the same problem, for me the issue is different. It came because some of the maven dependencies are not downloaded.

a. I went through properties -> Java Buildpath -> Maven Dependencies and identified the missed libraries. 
b. Removed the missed libraries artifacts from pom.xml
c. Downloaded the libraries and added them explicitly.

Solution 33 - Java

Run project as Maven test, then Run as JUnit Test.

Solution 34 - Java

Make sure if your test class working before , but you facing issue all of sudden. then clean your project and build it again. Make sure project has been configured in build path as read above article.

Solution 35 - Java

If those don't work in eclipse try: Alt + Shift + X and you will see 5 options at the bottom right of your screen. Choose the Java Application and it'll work

Solution 36 - Java

For Hybris Project, I fixed the issue by applying below changes in Build Path. I selected Project and clicked on Apply and Close.

enter image description here

Solution 37 - Java

Hmm, looks a little bizarre, try running it with the following annotation at the top of the class:

@RunWith(SpringJUnit4ClassRunner.class)
public class UserDaoTest {
}

and let me know how you get on with it.

Check that you have build automatically enabled as well. If you want to make sure your test classes are being compiled correctly clear out the Maven target folder (and any bin folder that Eclipse may be using). Are you using m2eclipse as well, as I find it to be a little problematic.

Solution 38 - Java

The solution to my problem which was similar: the libs were invalid. If you look in the .classpath file of the project, you'll see classpathentry tags with the key/value kind="lib". Some of mine were incorrect.

I didn't discover this until I turned off Validation settings. That is, there were so many errors in the JSP files, etc, that the classpath errors weren't evident (or possibly even showing up). As a result, nothing was being compiled into the destination output folders, but no helpful errors on why.

Solution 39 - Java

Furthermore, DOUBLE-CHECK the eclipse "Web Deployment Assembly" dialog.

This can be found: Project Properties->Deployment Assembly.

Recently I had an eclipse plugin modify one of my web projects, and it added mysteriously added the maven test directories /src/test/java, /src/test/resources to the Deployment Assembly. UGGGG!!!

Which is why my project worked fine when I built & deployed just straight maven to tomcat, no ClassNotFoundExceptions... However, when I did the deploy through Eclipse, Whammo!! I start getting ClassNotFoundExceptions because the TestCode is getting deployed.

Eric

Solution 40 - Java

That means your pom.xml has unresolved issues. Open the problems view solve accordingly. Then you will be able to run the test cases successfully without encountering the classnotfoundexception.

Solution 41 - Java

I am using gradle with eclipse and faced the same challenge today and tried a number of ways to resolve but the only way which helped me was to run command gradlew clean .

> P.S. => Don't combine the "build" with the above mentioned command.

Helped me, try your luck.

Solution 42 - Java

Its very Old Jul (which year) but I had the same problem .

Actual issue found that eclipse was not able to generate class file for the java file , classpath was proper.

See the problem tab and check if your project is missing something/file. you can create a new proj and add files one by one and build them until it stops compiling and creating classes ( check the workspace/proj/bin/package/ folder for classes )

its wierd but true , ecplise was failing in compliation because 4 of 20 java files were using a single image which was missing. and as result none of the java file was compiled .

CLASSPATH is not a issue here.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionswalknerView Question on Stackoverflow
Solution 1 - JavaCarlosView Answer on Stackoverflow
Solution 2 - JavaCoffeJunkyView Answer on Stackoverflow
Solution 3 - JavaakfView Answer on Stackoverflow
Solution 4 - Javauser3018906View Answer on Stackoverflow
Solution 5 - JavaEvilFishView Answer on Stackoverflow
Solution 6 - JavaKomodoDaveView Answer on Stackoverflow
Solution 7 - JavaRamonView Answer on Stackoverflow
Solution 8 - JavakisnaView Answer on Stackoverflow
Solution 9 - JavaRomieView Answer on Stackoverflow
Solution 10 - JavaStarfox275View Answer on Stackoverflow
Solution 11 - JavaRutgerDOWView Answer on Stackoverflow
Solution 12 - JavaiunknownView Answer on Stackoverflow
Solution 13 - JavaSiddharthView Answer on Stackoverflow
Solution 14 - Javauser2246725View Answer on Stackoverflow
Solution 15 - JavaGrayView Answer on Stackoverflow
Solution 16 - JavaVikramView Answer on Stackoverflow
Solution 17 - JavawanfkeView Answer on Stackoverflow
Solution 18 - JavaPremrajView Answer on Stackoverflow
Solution 19 - JavaAdligoView Answer on Stackoverflow
Solution 20 - JavaEduardo de LuccaView Answer on Stackoverflow
Solution 21 - JavacmhView Answer on Stackoverflow
Solution 22 - JavathSoftView Answer on Stackoverflow
Solution 23 - JavaTapas AdhikaryView Answer on Stackoverflow
Solution 24 - JavaHZhangView Answer on Stackoverflow
Solution 25 - JavasnakedogView Answer on Stackoverflow
Solution 26 - JavaHari Hara EarlapatiView Answer on Stackoverflow
Solution 27 - JavaSai KilliView Answer on Stackoverflow
Solution 28 - JavaMahendra RathodView Answer on Stackoverflow
Solution 29 - JavaSahitya MView Answer on Stackoverflow
Solution 30 - Javauser7639086View Answer on Stackoverflow
Solution 31 - JavapavelbView Answer on Stackoverflow
Solution 32 - JavaHari KrishnaView Answer on Stackoverflow
Solution 33 - JavaYao LiView Answer on Stackoverflow
Solution 34 - JavaSATHIYA BALAKRISHNANView Answer on Stackoverflow
Solution 35 - JavaDavid OhioView Answer on Stackoverflow
Solution 36 - JavaMr.AView Answer on Stackoverflow
Solution 37 - JavaJonView Answer on Stackoverflow
Solution 38 - JavaMikeView Answer on Stackoverflow
Solution 39 - JavaEric ManleyView Answer on Stackoverflow
Solution 40 - JavaRaju GuduriView Answer on Stackoverflow
Solution 41 - JavaNIKHIL CHAURASIAView Answer on Stackoverflow
Solution 42 - JavaSachinView Answer on Stackoverflow