java - Eclipse m2e Junit - mvn-Build 之后 ClassNotFound,或 "maven update project"之后缺少资源

标签 java maven junit m2e

我的 Eclipse 安装遇到一些问题。

我有一个构建得很好的多模块 Maven 项目。所有 jar 都在我期望的位置,当我将其部署到我的生产环境中时,它就可以工作了。

[INFO] Reactor Summary:
[INFO] 
[INFO] Datawizard-M3-Access Parent ....................... SUCCESS [0.344s]
[INFO] m3-datawizard-access-core ......................... SUCCESS [9.474s]
[INFO] m3-datawizard-access-banking-bankAT ............... SUCCESS [0.401s]
[INFO] m3-datawizard-access-banking-denmark .............. SUCCESS [1.143s]
[INFO] m3-datawizard-access-banking-russland ............. SUCCESS [0.353s]
[INFO] m3-datawizard-access-banking-sepa ................. SUCCESS [0.378s]
[INFO] m3-datawizard-access-banking-turkey ............... SUCCESS [0.222s]
[INFO] m3-datawizard-access-gefahrgutstueckliste ......... SUCCESS [0.312s]
[INFO] m3-datawizard-access-logistik-dhl ................. SUCCESS [0.338s]
[INFO] m3-datawizard-access-logistik-exportmanager ....... SUCCESS [0.279s]
[INFO] m3-datawizard-access-logistik-fixmanagement ....... SUCCESS [0.375s]
[INFO] m3-datawizard-access-logistik-frankreich .......... SUCCESS [0.271s]
[INFO] m3-datawizard-access-logistik-landwher ............ SUCCESS [0.501s]
[INFO] m3-datawizard-access-logistik-nordic .............. SUCCESS [0.274s]
[INFO] m3-datawizard-access-logistik-turkey .............. SUCCESS [0.324s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 36.851s
[INFO] Finished at: Fri Feb 14 23:37:34 CET 2014
[INFO] Final Memory: 38M/358M
[INFO] ------------------------------------------------------------------------

当我在 Maven 构建后启动 JUnit 测试时,出现 ClassNotFound 异常。

Class not found com.lr.datawizard.cron.TurkeyLstPackagesTest
java.lang.ClassNotFoundException: com.lr.datawizard.cron.TurkeyLstPackagesTest
    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:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    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)

即使重新启动 Eclipse 也无法解决问题。 为了摆脱这个异常,我必须使用 Eclipse 的“Project --> Clean Project”功能来清理项目。之后也可以运行“Maven --> Update Project”,测试开始。

这是最大的问题 清理项目后(无论哪种方式),src/main/resources 中的资源都会消失在 target/classes 文件夹中。因此,我的测试不再正常运行,因为它们依赖于一些不再可用的 spring 配置文件。

在德语中,我们说“Die Katze beißt sich in den Schwanz”(比如“猫咬自己的尾部”) 我必须构建项目才能使所有内容正确到位,但由于(奇怪的)ClassNotFound 异常)在清理时测试无法运行,执行消失了,而且我运行测试所需的文件也消失了。

有人知道如何解决这个问题吗?

PS: - 我重新安装了新的 Eclipse 副本(只有 me2 和 subversive) - 我删除所有 .classpath、.project、.setting 文件/文件夹 - 我从 svn checkout 了一份新副本,我 100% 确定它在 中有效,因为我有一些测试协议(protocol)。

不知道如何解决这个问题。我现在花了两天时间。

最佳答案

经过一天的玩耍,我发现了很多东西。

1st eclipse或者eclipse和m2e的组合似乎有问题。 类路径设置不正确。右键单击项目,然后选择“构建路径”-->“配置构建路径”,将打开一个窗口,其中选择“源”选项卡。 enter image description here

如您所见,在以“resources”结尾的两个源文件夹中都有“exclude: **” 以我的理解,这是不正确的。通过删除它,所有资源都会正确“编译”到类或测试类文件夹中。

第二件事是 maven 构建后的“ClassNotFoundException”。 这一点现在也可以理解。在我的 Maven 运行属性中,我选择了“跳过测试”。这会导致 src/test/java 不包含在构建过​​程中。这就是为什么该类不存在并且异常实际上是正确的。 通过在 maven 构建后简单地清理或“maven 更新项目”,一切都会恢复正常。

恕我直言,这是 IDE(或其组件之一)的错误行为,但至少我知道为什么会发生这种情况。

希望我的回答可以帮助到有同样问题的人。

干杯,克里斯蒂安

关于java - Eclipse m2e Junit - mvn-Build 之后 ClassNotFound,或 "maven update project"之后缺少资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21790894/

相关文章:

Java - 如何根据第三个列表合并两个列表?

java - 由 : java. lang.NoSuchMethodError : org. springframework.beans.MutablePropertyValues.get(Ljava/lang/String;)Ljava/lang/Object 引起

java - 无法解析符号 'Before' - Intellij jUnit

java - 莫基托。如何基于模拟对象作为参数返回 boolean 值?

java - 在源树而不是包中运行所有测试

java - Openshift 应用程序尝试加载已删除的类

java - 如何在 Pig Latin 中将十六进制转换为十进制?

java - 分割一行字符串

java - Spring无法创建可执行jar

java - 节奏模板引擎与 GAE/J : AccessControlException in even simplest case