我有一个多项目gradle项目:
HT-java的
ht-scraper使用位于ht-domain中的域模型和daos。 当我启动springboot应用程序时,我收到以下错误:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.hypetube.domain.dao.ChannelRepository] 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)}
当我在ht-scraper中拥有存储库类时,一切正常。
我的春季应用程序看起来像这样:
@Configuration
@EnableAutoConfiguration
@ComponentScan({"com.hypetube", "com.hypetube.domain"})
@EnableConfigurationProperties //use this to register other properties sources e.g. property files
public class Application {
private static final Logger log = LoggerFactory.getLogger(Application.class);
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Autowired
private Environment env;
@PostConstruct
public void printActiveSpringProfiles() {
log.info("Following spring profiles are active: {}", new ArrayList<>(Arrays.asList(env.getActiveProfiles())));
}
}
settings.gradle:
include 'ht-domain', 'ht-scraper'
build.gradle(ht.scraper):
compile project(":ht-domain")
一切正常;该项目编译没有错误迫在眉睫。 就在我启动应用程序时,会发生错误。
答案 0 :(得分:1)
为什么spring-boot
插件不包含ht-domain
子项目,这很奇怪。要解决方法测试,请将以下代码添加到ht-scraper/build.gradle
test {
classpath = project(":ht-domain").sourceSets.main.runtimeClasspath
}
但是运行打包应用程序仍然存在问题。我已从PlaylistRepository
类中删除了所有注释,并将以下注释添加到Application
:
@EnableMongoRepositories({"com.hypetube.domain"})
不开始 - 至少没有类路径问题。希望有所帮助,正如我所说的非常奇怪的行为:/