我最近将我的环境从 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)
- 其他(类似于Web)
- 网络
- 源/主/java
- 源/主/资源
- 源/测试/java
- 源/测试/资源
- 目标/类
- 目标/测试类
- .settings
- .classpath
- 。项目
- 目标/类
- .settings
- .classpath
- 。项目
Web下的classpath入口如下:
<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下的classpath入口如下:
<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 文件夹下,它也不会复制类下的资源文件夹。
关于这个问题,我已经搜索了很多。
一种解决方案还建议将项目作为 Maven 项目导入 eclipse 并更新配置。这会将我的项目分成多个模块,并且 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)