Maven依赖与范围“测试”& m2eclipse中启用了工作区分辨率 - 仅在Maven构建之后显示编译错误

时间:2014-02-14 01:57:39

标签: java eclipse maven m2eclipse

这个问题是对以下问题的回答的结果: Injection of an autowired field failed in a multi-module Maven project - NoSuchBeanDefinitionException

根据上述问题的答案,我配置了Maven模块的以下结构:

Maven modules http://i62.tinypic.com/2ly0s38.png

在这种情况下,基本模块中的类Foo可用于模块A中的测试(例如,当它使用IFoo接口自动装配时),但不能在生产代码中使用(包含在src中) /主/爪哇)。

当有人在生产代码(在src / main / java下)的模块A中的类中添加对Foo类的引用时,Maven构建失败。但是,在这种情况下,Eclipse中的自动构建不会失败,因为我使用了启用了工作空间分辨率的m2eclipse插件。我必须运行maven buiild(mvn clean install)才能看到编译失败。之后,在Eclipse中受影响的类中仍然无法立即看到错误。我必须在受影响的java类中进行更改(例如添加空格并保存文件)然后我可以在此类中看到错误。但是,更令人误解的是,Eclipse中显示的编译错误与真正的编译错误无关。 - 编译错误显示在错误行之后的下一行 我不想在m2eclipse插件中禁用Workspace Resolution,因此最新的源总是用于Eclipse的编译。但是,在Eclipse中立即看到这样的编译错误并且不必执行Maven构建以便在Eclipse中看到编译错误会很高兴。

Eclipse编译后是否可以立即看到编译错误?

1 个答案:

答案 0 :(得分:0)

我不确定您为什么在Maven构建上遇到编译错误。请参阅sample project on Github,其中演示了一个多模块Maven设置模块关系,如上面的帖子所示。

  • interface - 此模块是每个其他模块所依赖的基础,与您帖子中的base-api模块类似。它包含一个名为IGreeter的单一界面,与您帖子中的IFoo界面基本相似;
  • implementation - 此模块取决于interface,并包含实现Greeter的单个类IGreeter。它类似于帖子中的base模块。请注意,此模块中没有其他代码,甚至没有单元测试;
  • service - 这提供了一个虚构的服务图层,取决于interface。此外,它对test具有implementation作用域依赖性。它与您帖子中的module A类似。它包含一个名为GreetingService的类及其关联的集成测试类GreetingServiceTest。可以从命令行或Eclipse运行测试;
  • web - 这提供了一个虚构的应用程序层,并依赖于所有其他模块。它使用GreetingService向用户显示问候消息。将其作为mvn clean package tomcat7:run运行。

此示例显示了如何仅依赖于某些接口(service模块)来编写业务逻辑。它显示了如何在测试期间选择特定的接口实现来证明集成有效。

此示例还说明了如何在运行时(web模块)选择接口的特定实现。如果您有多个IGreeter实现并希望在运行时使用特定的实现,则可以将其作为依赖项添加到web模块,而不是添加implementation模块。