Eclipse - java.lang.ClassNotFoundException

时间:2009-06-27 15:01:17

标签: java eclipse exception maven-2

当尝试从Eclipse启动我的JUnit-Test时,我得到一个“ClassNotFoundException”。从控制台运行“mvn test”时 - 一切正常。此外,Eclipse中没有报告任何问题。

我的项目结构如下:

  • 父项目(pom-packaging)
    • Web项目(war-packaging - 我的JUnit-test就在这里)
    • Flex项目
    • 配置项目

编辑:如何找不到课程?这是一个简单的HelloWorld-Application,没有特殊的库。

这是我的JUnit的运行配置: alt text http://www.walkner.biz/_temp/runconfig.png


Testclass(但正如我所说;它不适用于简单的HelloWorld ......):

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("", ""));
    }
}

41 个答案:

答案 0 :(得分:192)

我已经多次遇到过这种情况,经过多次尝试,我找到了解决方案。

检查项目构建路径并为每个文件夹启用特定的输出文件夹。逐个浏览项目的每个源文件夹,并设置maven将使用的输出文件夹。

例如,您的网络项目src/main/java应该在网络项目下有target/classes,测试类也应该在网络项目下有target/test-classes等等。

使用此配置将允许您在eclipse中执行单元测试。

还有一个建议,如果您的Web项目的测试需要资源下的某些配置文件,请确保将该文件夹包含为源文件夹并进行正确的构建路径配置。

希望它有所帮助。

答案 1 :(得分:47)

卡洛斯的做法有所帮助! Eclipse - java.lang.ClassNotFoundException

尝试检查junit运行配置的类路径:

  1. 打开运行配置
  2. 点击您要开始的jUnit-Test
  3. 转到类路径选项卡
  4. 尝试添加文件夹(单击用户条目,单击高级,单击添加文件夹,单击确定并搜索输出文件夹以查找测试类(您在projektproperties java build path下找到的那些,源代码))
  5. 适合我。

答案 2 :(得分:17)

您的构建类路径是正确的,这就是您可以编译的原因。需要检查JUnit的类路径。转到“运行”菜单,然后选择“打开运行对话框”。在那里你应该看到左边的一棵树,JUnit作为一个选项。打开该节点,找到并选择您的测试。在右侧窗格中,您将看到classpath的选项卡。看一下,确保找到测试试图实例化的类。

修改

这似乎是maven的一个问题,它在发布后的行为改变了默认的Eclipse输出文件夹。我见过描述的解决方案

  • 将maven放入bootclass路径上方jre工作,或
  • 运行mvn clean test可以解决问题或
  • 刷新所有eclipse项目,导致重建修复问题
  • 转到您的项目并选择Maven->更新配置解决问题
与前三个一起,有报道称这个问题反复发生。最后一个看起来对我来说最好,但如果它不起作用,请尝试其他。

herehere是一些信息

答案 3 :(得分:5)

启用 [x]使用临时JAR在运行配置 Classpath选项卡中指定类路径(以避免类路径长度限制)我的诀窍。

如果您的项目很大,并且您与其他同级项目有很多依赖关系,而您对Maven的依赖关系很大,那么您可能会遇到类路径长度限制,这似乎是唯一的解决方案(除了使目录到本地Maven存储库更短(我们已经从c:/ m2开始了

enter image description here

答案 4 :(得分:4)

问题可能是缺少构建文件夹中的类文件。一个解决方案是清理项目并重建它。

答案 5 :(得分:3)

我有完全相同的问题,但我想出来了!转到项目文件并右键单击它,然后单击Refresh或按F5。然后尝试运行它。如果它仍然无法工作,那就忘了它,因为我有完全相同的问题,它只是意味着你的Eclipse版本是垃圾。

答案 6 :(得分:3)

这是我解决问题的方法。当然,很多事情都可能导致它发生。对我来说,Maven2(不是Eclipse的插件)将eclipse配置文件设置为使用不同的构建器(aspectJ),但我没有在eclipse中插件./

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

干杯 拉蒙巴克兰

答案 7 :(得分:3)

这里有许多令人费解的建议。

我在使用Maven项目多次遇到这个问题后,通过拖放或者执行类名重构来移动资源。

如果发生这种情况,只需将问题测试用例(.java)通过终端/文件浏览器复制(不移动)到Eclipse中的另一个位置right-click -> Delete,并在给定选项时选择在磁盘上删除,将复制的文件移动/复制到原始文件位置,然后在Eclipse中选择项目并按F5刷新资源。

这很容易做到,并且每次都为我永久修复了这个问题。

答案 8 :(得分:2)

我解决了Bulit路径--->库--->添加库---> Junit check junit4

答案 9 :(得分:2)

萨钦的权利: 即使使用正确的类路径,问题选项卡也会显示某些依赖项或资源/项目有错误需要修复,以便maven在您的测试类中创建或更改时自动构建和创建类。

“嗨,

它非常古老的Jul(哪一年),但我遇到了同样的问题。

实际问题发现eclipse无法为java文件生成类文件,类路径是正确的。

查看问题选项卡,检查项目是否缺少某些/文件。你可以创建一个新的项目并逐个添加文件并构建它们,直到它停止编译和创建类(检查classes / proj / bin / package /文件夹的类)

由于其中有两个java文件中有4个使用了丢失的单个图像,因此它很奇怪,但却是真实的,ecplise失败了。结果没有编译任何java文件。

CLASSPATH在这里不是问题。“

答案 10 :(得分:2)

我们确实有异常(在Win7上使用SpringSource Tools,tomcat),原因是我们从SubDomain.java重构了一个文件名(重命名为文件)到Subdomain.java(D vs d)并且不知怎的相撞虽然SpringSource显示了新名称Subdomain.java。解决方案是删除文件(通过SpringSource)并在名称Subdomain.java下再次创建它并复制粘贴其以前的内容。就这么简单。

答案 11 :(得分:1)

我所做的只是属性 - > Java构建路径 - >订单和出口 - >启用所有未选中的框 - >将Junit一路向上移动

答案 12 :(得分:1)

我在这个页面上尝试了所有解决方案:刷新项目,重建,清理所有项目,重新启动Eclipse,重新导入(甚至)项目,重建maven和刷新。没有任何效果。 做了的工作是将类复制到一个运行良好的新名称 - 奇异但真实。

在忍受了一段时间之后,我只是修理了它:

  1. 通过Run菜单
  2. 选择Run Configurations
  3. 选择与您的单元测试相关联的运行配置。
  4. 按删除或点击红色X,从Run Configuration删除条目。
  5. 必须使用缓存的运行配置搞砸了一些东西。

答案 13 :(得分:1)

尝试

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

之后工作

Maven 2 LifeCycle>>测试

答案 14 :(得分:1)

从eclipse(不是从硬盘)删除项目,这在某种程度上正在清理工作区并重新导入项目进入eclipse,这对我来说很有用。

答案 15 :(得分:1)

通常在运行java应用程序java工具时无法找到类文件时会出现此问题。

主要在maven项目中我们看到了这个问题,因为 Eclipse-Maven同步问题。要解决此问题: Maven->更新配置

答案 16 :(得分:1)

我建议尝试将其添加到VM参数中;

-verbose:class -verbose:module -Xdiag

然后您可以从Eclipse调试它,它应该打印出一些消息,例如;

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)

由此,您可以在LancherHelper.java 760上设置一个断点,以调试Eclipse Lanucher本身。就我而言,即使在Lanuch配置中有很多jar,我也注意到用户类路径似乎为空。

答案 17 :(得分:1)

嗯,这个问题基本上可以通过新建一个项目来解决。

  1. 关闭项目(将代码保存在计算机上的另一个文件夹中)。
  2. 创建一个新项目(添加一个新的最终目录,不要保留选择的默认目录)。
  3. 重新制作您之前的项目,添加之前保存的代码。

发生这种情况可能是因为您创建了一个项目并且没有选择目录/文件夹或类似的东西。 希望对你有帮助!

答案 18 :(得分:1)

点击project->properties->Java build path->Source并检查每个src文件夹是否仍然有效或最近已删除。更正任何缺少的路径或不正确的路径,然后重建并运行测试。它将解决问题。

答案 19 :(得分:1)

嗯,看起来有点离奇,尝试在课程顶部使用以下注释运行它:

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

让我知道你是如何继续下去的。

检查您是否也自动启用了构建。如果要确保正确编译测试类,请清除Maven目标文件夹(以及Eclipse可能正在使用的任何bin文件夹)。你是否也使用m2eclipse,因为我发现它有点问题。

答案 20 :(得分:1)

我的问题的解决方案类似:libs无效。如果查看项目的.classpath文件,您将看到带有键/值kind =“lib”的classpathentry标记。我的一些不正确。

在我关闭验证设置之前,我没有发现这一点。也就是说,JSP文件等中存在很多错误,类路径错误不明显(或甚至可能显示)。因此,没有任何内容被编译到目标输出文件夹中,但没有任何有用的错误。

答案 21 :(得分:1)

我也遇到了这个问题,并且能够为我的案例提供足够的解决方案。如果您的Eclipse项目在项目根目录中有一个.classpath文件(在Navigator视图中而不是Package Explorer视图中看到它),请确保您的Maven classpathentry出现在JRE Con​​tainer 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>

如果您的项目没有.classpath文件,则可以编辑项目的Java Build Path以切换Order和Export。如果您的项目具有.classpath文件,并且您只更改了Java Build Path中的顺序,您将看到订单不受影响,问题将继续发生。

一个项目 - &gt;干净在你做出改变之后永远不会伤害。

答案 22 :(得分:0)

运行Web应用程序时我们大多数人都会遇到此异常。当您收到此错误时,您将.class文件放在适当的文件夹中。

在Web应用程序中,所有.class文件都应位于WEB-INF \ Classes文件夹中。 如果您在Eclipse中运行Web应用程序,请按照步骤

步骤1:右键单击Project文件夹,然后选择Properties 第2步:单击“Java Build Path”,您将看到不同的选项卡,如“source”,“projects”,“libraries”等 第3步:选择Source文件夹。在此下,您将看到您的项目详细信息 第4步:在“Source”文件夹中,您将看到Default Output Folder选项。在这里你必须在WEB-INF下给出classes文件夹。 只需给出类似projectname / WebContent / WEB-INF / classes的路径 结构取决于您的应用程序 请记住这里你不需要创建“classes”文件夹。 Eclipse将为您创建它。 第5步:单击“确定”,然后清理项目并构建。这就是你的应用程序现在运行。

答案 23 :(得分:0)

您是否尝试右键单击项目根目录,选择“属性”,并确保CLASSPATH正确无误?如果我没记错的话,你就是这样做的。

关于Eclipse运行单元测试的方式,需要您以特殊方式将junit JAR添加到运行时CLASSPATH?

我使用IntelliJ,所以我没有这些问题。

我自己检查Eclipse,但我不喜欢在桌面上使用它。

答案 24 :(得分:0)

请确保您的测试课程是否在以前运行过,但是突然遇到了问题。然后清理您的项目并重新构建。确保已按照上述文章在构建路径中配置了项目。

答案 25 :(得分:0)

我正在使用带有eclipse的gradle,并且今天也面临着同样的挑战,并尝试了多种解决方法,但是帮助我的唯一方法是运行命令gradlew clean

  

P.S。 =>不要将“ build”与上述命令结合使用。

帮助我,祝您好运。

答案 26 :(得分:0)

以Maven测试运行项目,然后以JUnit测试运行。

答案 27 :(得分:0)

我面临同样的问题,对我来说问题不同。之所以这样,是因为没有下载某些maven依赖项。

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.

答案 28 :(得分:0)

转到构建路径 - &gt;源和切换到是选项&#34;忽略可选编译问题&#34;对于所有源文件夹。

答案 29 :(得分:0)

运行junit测试时,我看到了Eclipse - java.lang.ClassNotFoundException。 我删除了一个添加到项目中的外部jar文件。从Eclipse中删除此jar文件的引用到项目之后。我可以运行Junit测试。

答案 30 :(得分:0)

我最近在Eclipse中遇到了同样的错误,即无论我如何更改配置,Eclipse IDE都找不到Unit测试类。从这里和其他网站上的帖子中学习,我仔细检查并三重检查了类路径和源信息,并在“运行配置”和“Java构建路径”中上下移动源文件夹和库。 “配置窗口,我也清理了项目并重建了它,但没有一个技巧适合我。特定的Java项目是一个旧的ANT编译项目,并且Eclipse库中包含许多jar。

然后,我更改了单元测试类以添加main()方法并右键单击它“运行”作为Java应用程序而不是JUnit测试,突然,Eclipse似乎醒来并正确识别了类。之后,我将其切换回单元测试应用程序,它仍在工作。

这似乎是Eclipse中的一个错误,我猜测大量的库(&gt; 260)可能会混淆JVM查找我的JUnit类的能力。

答案 31 :(得分:0)

JMockit / JUnit集成不支持JUnit 4.4。只要 支持版本4.5或更新版本。

答案 32 :(得分:0)

在Java Build Path中更改类路径工件的顺序为我解决了这个问题。

  1. 右键单击项目并转到项目构建路径。
  2. 转到“订购和导出”选项卡,将JRE系统库移至源代码之后。
  3. 这应该解决它。

答案 33 :(得分:0)

这意味着您的pom.xml存在未解决的问题。打开问题视图解决相应问题。然后,您将能够成功运行测试用例,而不会遇到classnotfoundexception。

答案 34 :(得分:0)

此外,DOUBLE-CHECK日食“Web部署程序集”对话框。

可以找到:Project Properties-&gt; Deployment Assembly。

最近我有一个eclipse插件修改我的一个web项目,并且它神秘地添加〜将maven测试目录/ src / test / java,/ src / test / resources添加到Deployment Assembly。 UGGGG!

这就是为什么我的项目在我建造和工作时工作正常的原因部署直接maven到tomcat,没有ClassNotFoundExceptions ...但是,当我通过Eclipse,Whammo进行部署时!我开始得到ClassNotFoundExceptions,因为TestCode正在部署。

埃里克

答案 35 :(得分:0)

我遇到了同样的问题。我所做的就是,

i)中。生成的Eclipse工件

mvn clean eclipse:eclipse

ⅱ)。刷新项目并重新运行junit测试。应该工作正常。

答案 36 :(得分:0)

来自eclipse的JUnit测试也给了我NoClassDefFoundError。 从命令行运行'mvn clean test'让我在几个罐子上出现以下错误: LOC标头无效(签名错误) 从本地m2存储库中删除这些jar并再次运行'mvn clean test' 解决了我的问题。

答案 37 :(得分:0)

确保您的测试启动配置不包含以下行,或尝试启用自动Maven依赖关系管理。

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

答案 38 :(得分:0)

我尝试了在这篇长篇文章中阅读的所有内容,令人难以置信的是,对我有用的是,而不是单击测试类并选择Run as JUnit test,单击测试方法和以JUnit test运行。我不知道为什么?

答案 39 :(得分:0)

请指向Windows中正确的JDK&gt;偏好&gt; Java&gt;已安装JRE。

不要指向jre,指向正确的JDK。我指向JDK 1.6U29并刷新了该项目。

此后,问题已经消失,jUnit测试工作正常。

谢谢,
-Tapas

答案 40 :(得分:-2)

它非常古老的Jul(哪一年),但我遇到了同样的问题。

实际问题发现eclipse无法为java文件生成类文件,classpath是正确的。

查看问题选项卡,检查项目是否缺少某些/文件。 你可以创建一个新的项目并逐个添加文件并构建它们直到它停止编译 和创建类(检查classes / proj / bin / package /文件夹的类)

由于其中有两个java文件中有4个使用了丢失的单个图像,因此它很奇怪,但却是真实的,ecplise失败了。结果没有编译任何java文件。

CLASSPATH不是问题。