gpt4 book ai didi

java - 在多模块 Maven 项目中注入(inject) Autowiring 字段失败 - NoSuchBeanDefinitionException

转载 作者:行者123 更新时间:2023-12-01 23:12:14 25 4
gpt4 key购买 nike

我在 Stackoverflow 和其他网站上阅读了许多有关此问题的帖子,但没有找到解决方案。

我的 Maven 模块具有以下结构,其中一个主父 pom 声明了所有这些模块(我简化了此处的结构,以便仅显示相关部分):

Maven modules

base 和“A”模块依赖于base-api 模块。 base 模块包含 base-api 模块中包含的接口(interface)的实现。

我在“base-api”模块中有一个接口(interface) IFoo。接口(interface) IFoo 由“base”模块中的类 Foo 实现。 Foo 类使用 Spring 的“@Service”注释进行注释。

我希望 Foo 服务在我的测试类中 Autowiring ,该测试类包含在模块“A”中:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class FooTest {

@Autowired
private IFoo foo;

我还为我的测试创建了一个上下文配置文件,其中包含以下行

<context:component-scan base-package="x.y.z"/>

IFoo 和 Foo 都包含在 x.y.z 的子包中(在不同的 Maven 模块中,如上所述)。

当我在 Eclipse 中运行测试(使用 m2eclipse 插件)时,它会正确通过。但是,当我运行maven构建(mvn clean install)时,出现以下错误:

org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No matching bean of type [x.y.z.v.IFoo] found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this dependency.
Dependency annotations {@org.springframework.beans.factory.annotation.Autowired(required=true)}

我做错了什么?

最佳答案

如果模块 A 不依赖于基本模块,则 模块 A 上的任何执行都不会找到 中的任何组件基本模块。因此,模块 A 中依赖于基本模块 实现的任何组件都将失败(因为该实现在模块 A 中不可见)。

如果您只是希望模块 A 可以访问基本模块中的组件来运行测试,则可以添加来自基本模块的依赖项到模块A,并将scope设置为test。这样,您对模块 A 的测试就可以正常运行。如果需要,您可以灵活地在运行时引入完全不同的 JAR,并使用不同的 IFoo 实现。

关于java - 在多模块 Maven 项目中注入(inject) Autowiring 字段失败 - NoSuchBeanDefinitionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21743657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com