java - 让Eclipse识别普通源文件和测试源文件的区别

标签 java eclipse maven testing dependencies

我正在使用 Eclipse 4.3.1 与 Maven 集成。

Eclipse 无法识别正常源文件和测试源文件之间的区别。

例如:当我在普通源文件夹中使用范围为 test 的 Mockito 类时,一切似乎都很好。或者当我错误地在测试源文件夹中创建一个类时,没有任何反应。

只有在Jenkins做Maven构建时,才会显示编译错误。

我能否以某种方式使 Eclipse 正常工作?

最佳答案

你必须区分运行时和编译时。

  1. 编译时间: Eclipse 仅支持每个项目一个构建路径。如果您的测试文件和应用程序文件共享同一个项目,它们共享相同的编译时类路径。这意味着您可以访问 src 目录(test 或 main)中的任何类以及来自任何依赖项的类。 Eclipse 无法将此标记为错误,因为它看不到所有这些文件之间的区别。

  2. 运行时间: Eclipse 允许在运行时使用不同的类路径,而 m2e 支持这一点。每次禁止访问都会导致 RuntimeException (ClassNotFoundException)。

运行时访问如下:

# access from -> access to
src/main/java -> jar(scope: compile) [allowed]
src/main/java -> jar(scope: test)    [forbidden]
src/main/java -> src/test/java       [forbidden]

src/test/java -> jar(scope: compile) [allowed]
src/test/java -> jar(scope: test)    [allowed]
src/test/java -> src/main/java       [allowed]

回答你的问题:如果不修补 eclipse,你想要的是不可能的。 尽管您可以将测试文件和应用程序拆分到单独的项目中。

最简单的解决方案是在 checkin 之前在本地计算机上运行/测试您的应用程序。

关于java - 让Eclipse识别普通源文件和测试源文件的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21749609/

相关文章:

java - 我不懂线程

java - Eclipse 中的 Maven Web 项目错误

java - 我如何解决 eclipse 延迟问题

java - 每次更改我的 Java 代码时,我可以阻止重新启动我的应用程序吗?

linux - 在不使用 M2 存储库但使用系统 jar 的情况下使用 Maven 离线构建项目

java - Maven Surefire 插件 + 并行构建

java - 将 C++ std::string find*of() 方法转换为 Java

java - 在增强型 for 循环中重复迭代

java - 如何使用 Spring Boot 在 application.properties 中注入(inject) Maven 配置文件的属性

java - 如何修复损坏的类文件错误?