Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多模块Maven项目中自动连线字段的注入失败-NoSuchBeanDefinitionException_Java_Spring_Maven - Fatal编程技术网

Java 多模块Maven项目中自动连线字段的注入失败-NoSuchBeanDefinitionException

Java 多模块Maven项目中自动连线字段的注入失败-NoSuchBeanDefinitionException,java,spring,maven,Java,Spring,Maven,我在Stackoverflow和其他网站上读了很多关于这个问题的帖子,但没有找到解决方案 我有以下Maven模块的结构,其中一个主要父pom声明了所有这些模块(我在这里简化了结构,以便只显示相关部分): 基本模块和“A”模块依赖于基本api模块。基本模块包含基本api模块中包含的接口的实现 我在“基本api”模块中有一个接口IFoo。接口IFoo由“base”模块中的类Foo实现。类Foo使用Spring的“@Service”注释进行注释 我希望Foo服务自动连接到模块“A”中包含的测试类中

我在Stackoverflow和其他网站上读了很多关于这个问题的帖子,但没有找到解决方案

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

基本模块和“A”模块依赖于基本api模块。基本模块包含基本api模块中包含的接口的实现

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

我希望Foo服务自动连接到模块“A”中包含的测试类中:

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

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

我做错了什么

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


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

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


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

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


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

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



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

确认:实现类在基本模块中?此测试是在基本模块中还是在模块A中?实现类Foo在基本模块中(不在基本api中)。测试类位于模块A中。测试类还测试其他内容,因此不直接包含在基本模块中。我知道我可以在测试中模拟Foo服务,但我不想这样做。我想在测试中使用IFoo的真正实现Foo。模块A不依赖于基本模块?那么您希望它如何看到实现类呢?我不知道,所以我问。当我在模块a中添加了对基本模块的依赖时,它就工作了,但是我认为它可以独立于实际的实现,因此模块a只依赖于基本api模块,而来自基本模块的实现是自动连接的。当我拥有从模块a到基本模块的依赖关系时,我就不需要基本api模块,因为从基本模块到模块A的一切都是可用的。在我看来,最好使用api模块分离真正的实现。Maven需要依赖关系才能将实现类添加到类路径。您可以对其进行范围限定,以便您的模块不具有编译时依赖关系,但您必须以某种方式连接它?此测试是在基本模块中还是在模块A中?实现类Foo在基本模块中(不在基本api中)。测试类位于模块A中。测试类测试al
<context:component-scan base-package="x.y.z"/>
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)}