我正在使用Spring Framework开发项目。 我创建了大约5个模块,有时一个依赖于其他模块,但它们都处于顶层,到目前为止一切正常。
示例:
数据库模块只有外部依赖
身份模块依赖于数据库模块
Facebook填充模块取决于身份模块
现在,我已经在名为modules的项目的根目录中创建了目录,并将所有模块移入其中(因此它们都是,并且彼此之间的距离相同)。
所有测试都通过,我可以毫无问题地构建/编译和检查类。
然而,现在当我尝试只运行身份模块(不需要facebook的东西)时,spring会抛出异常,它找不到facebook bean。当然它不能,因为没有依赖,但我不想添加这种依赖。 @Configuration是@Lazy所以无论如何都没有创建这样的@Bean。
代码:
new AnnotationConfigApplicationContext(Application.class);
应用程序类是@Lazy @Configuration并且从整个应用程序执行@ComponentScan,据我所知,它也从其他模块中找到@Configuration,然后 - 我不知道为什么 - 试图创建那些@ Bean&# 39;来自其他模块但未按预期失败。
我已经使用git验证过,只有工作状态和不工作状态才会将这些模块移动到新文件夹中。
因此,澄清一下,工作/默认结构是:
/.gradle
/.idea
/DatabaseModule
/IdentityModule
/FacebookModule
/.out
/.gitignore
并且不工作是:
/.gradle
/.idea
/modules/DatabaseModule
/modules/IdentityModule
/modules/FacebookModule
/.out
/.gitignore
代码保持不变。
我认为,如果我将所有依赖项添加到所有模块,那么它将起作用,但出于显而易见的原因,我不想这样做。
我做错了吗? 是否有任何惯例,我正在打破?
奖金问题:嵌套模块与包含模块的普通文件夹有何不同?
编辑: 我还应该注意,所有测试都在两种情况下都通过,但是我没有在测试中使用spring(没有依赖注入) - 只是new或Mock()所有内容