这个问题是对以下问题的回答的结果: 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编译后是否可以立即看到编译错误?
答案 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
模块。