Eclipse / Maven / Junit:即使编译的类在test-classes文件夹中,junit也会抛出classnotfound

时间:2012-12-01 03:07:16

标签: eclipse maven-2 junit4 m2eclipse m2e

我最近将我的环境从Eclipse Ganymede升级到Eclipse Juno。我的应用程序使用旧的maven-eclipse-plugin,所以我不得不在.classpath和.project和.settings文件中进行更改,以便eclipse juno中的m2e插件正确获取所有信息。我是通过以下链接完成此操作的 - http://blog.frankel.ch/migrating-from-m2eclipse-to-m2e

我的应用程序运行完全正常使用tomcat7和maven也可以正常工作。 当我试图在eclipse中运行测试作为junit测试时,我的问题开始了。这给了我一个ClassNotFoundException。作为旁注,即使我在eclipse中将我的test-classes文件夹添加为类路径变量,它仍然存在问题,因为它说它无法找到资源文件夹。这个完全相同的环境与早期的eclipse,maven插件和类路径配置完美配合。所以我不知道发生了什么变化。

我正在与您分享我的项目结构和类路径详细信息。请耐心等待,因为问题有点长。

  • XXX
    • DBUnit(类似于Web)
    • 其他(类似于网络)
    • 网络
      • 的src /主/ JAVA
      • 的src /主/资源
      • 的src /测试/ JAVA
      • 的src /测试/资源
      • 目标/类
      • 目标/测试类
      • .settings
      • 的.classpath
      • 的.project
    • 目标/类
    • .settings
    • 的.classpath
    • 的.project

Web下的类路径条目如下:

<classpathentry kind="src" output="target/classes" path="src/main/java"/>
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="target/classes"/>

XXX下的类路径条目如下:

<classpathentry kind="src" output="Others/target/classes" path="Others/src/main/java"/>
<classpathentry kind="src" path="DBUnit/src/main/java"/>
<classpathentry kind="src" path="Web/src/main/java"/>
<classpathentry excluding="mock/" kind="src" output="Web/target/test-classes" path="Web/src/test/java"/>
<classpathentry excluding="**" kind="src" output="Web/target/classes" path="Web/src/main/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry kind="var" path="TOMCAT_HOME/lib/annotations-api.jar"/>
<classpathentry kind="var" path="TOMCAT_HOME/lib/el-api.jar"/>
<classpathentry kind="var" path="TOMCAT_HOME/lib/jasper.jar"/>
<classpathentry kind="var" path="TOMCAT_HOME/lib/jsp-api.jar"/>
<classpathentry kind="var" path="TOMCAT_HOME/lib/servlet-api.jar"/>
<classpathentry kind="output" path="target/classes"/>

因此,当我清理项目时,eclipse不会将主要的java类放在module1 / target / classes文件夹下,也不会复制类下的resources文件夹。

关于这个问题,我已经搜索了很多。

一个解决方案还建议将项目导入eclipse作为Maven项目并更新配置。这会将我的项目拆分为多个模块,maven / eclipse会抛出异常 - “路径必须包含项目和资源名称”。我也不明白这个错误。

另一个建议删除exclude =“**”。我删除了它,但这也没有帮助。

项目结构有问题吗? module1是否需要类路径和项目文件?

请帮助,我将非常感激。感谢。

2012年12月3日更新

这是例外 -

Class not found com.iei.gas.service.QuartzTestService
java.lang.ClassNotFoundException: com.iei.gas.service.QuartzTestService 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

0 个答案:

没有答案