이 문제에 대한 Stackoverflow 및 다른 사이트의 많은 게시물을 읽었지만 해결책을 찾지 못했습니다.
이 모든 모듈을 선언하는 하나의 주요 부모 pom이있는 Maven 모듈의 다음 구조가 있습니다 (관련 부분 만 표시하기 위해 여기서 구조를 단순화했습니다).
기본 및 "A"모듈은 기본 API 모듈에 따라 다릅니다. 기본 모듈에는 base-api 모듈에 포함 된 인터페이스의 구현이 포함됩니다.
"base-api"모듈에 IFoo 인터페이스가 있습니다. IFoo 인터페이스는 "기본"모듈의 Foo 클래스에 의해 구현됩니다. Foo 클래스는 Spring의 "@Service"주석으로 주석 처리됩니다.
모듈 "A"에 포함 된 테스트 클래스에서 Foo 서비스를 자동 연결하고 싶습니다.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class FooTest {
@Autowired
private IFoo foo;
다음 줄을 포함하는 내 테스트 용 컨텍스트 구성 파일도 만들었습니다.
<context:component-scan base-package="x.y.z"/>
IFoo와 Foo는 모두 xyz의 하위 패키지에 포함되어 있습니다 (위에서 설명한대로 다른 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)}
내가 무엇을 잘못하고 있지?
에 module A
종속되지 않은 경우에서 base module
실행 module A
하면의 구성 요소를 찾을 수 없습니다 base module
. 결과적으로에서 module A
구현 에 종속 된 모든 구성 요소 base module
가 실패합니다 (에서 구현이 표시되지 않기 때문에 module A
).
테스트를 실행 base module
하기 module A
위해의 구성 요소에 액세스 할 수 있도록 하려면 base module
을 module A
로 scope
설정하여 에서 종속성을 추가 할 수 있습니다 test
. 이렇게하면 테스트 module A
가 제대로 실행됩니다. IFoo
필요한 경우 다른 구현으로 런타임에 완전히 다른 JAR을 도입 할 수있는 유연성을 갖게됩니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다