Java 带Spring的嵌套模块

Java 带Spring的嵌套模块,java,spring,Java,Spring,我正在用Spring框架开发项目。 我已经创建了大约5个模块,有时一个依赖于另一个,但它们都是顶级的,到目前为止,一切都很好 例如: 数据库模块只有外部依赖项 标识模块依赖于数据库模块 Facebook stuff模块依赖于身份模块 现在,我在项目的根目录中创建了一个名为modules的目录,并将所有模块移动到其中(它们都是这样的,并且彼此之间的相对距离仍然相同) 所有测试都通过了,我可以毫无问题地构建/编译和检查类 然而,现在当我尝试只运行身份模块(不需要facebook的东西)时,sprin

我正在用Spring框架开发项目。 我已经创建了大约5个模块,有时一个依赖于另一个,但它们都是顶级的,到目前为止,一切都很好

例如:

数据库模块只有外部依赖项

标识模块依赖于数据库模块

Facebook stuff模块依赖于身份模块

现在,我在项目的根目录中创建了一个名为modules的目录,并将所有模块移动到其中(它们都是这样的,并且彼此之间的相对距离仍然相同)

所有测试都通过了,我可以毫无问题地构建/编译和检查类

然而,现在当我尝试只运行身份模块(不需要facebook的东西)时,spring给了我一个例外,它找不到facebook bean。当然不能,因为没有依赖关系,但我不想添加此依赖关系@配置是@Lazy的,所以无论如何创建这样的@Bean是没有意义的

代码:

new AnnotationConfigApplicationContext(Application.class);
应用程序类是@Lazy@Configuration,它可以从整个应用程序中扫描@component,据我所知,它还可以从其他模块中找到@Configuration,然后——我不知道为什么——尝试从其他模块中创建这些@Bean,但如预期的那样失败

我已经用git验证过,工作和不工作状态之间的唯一区别是将这些模块移动到新文件夹中

因此,为了澄清,工作/默认结构是:

/.gradle

/.idea

/DatabaseModule

/IdentityModule

/FacebookModule

/.out

/.gitignore
不起作用的是:

/.gradle

/.idea

/modules/DatabaseModule

/modules/IdentityModule

/modules/FacebookModule

/.out

/.gitignore
代码保持不变

我认为,如果我将所有依赖项添加到所有模块中,那么它将工作,但出于明显的原因,我不想这样做

我做错什么了吗? 有什么我正在打破的惯例吗

附加问题:嵌套模块与包含模块的普通文件夹有何不同

编辑:
我还应该注意,所有测试都在这两种情况下通过,但是我在测试中没有使用spring(没有依赖项注入)-只是使用new或Mock()everything

您打算如何让spring知道运行的模块具有哪个依赖项或没有依赖项?我正在将编译输出从模块打包到JAR。Spring可以自由使用它将找到的任何和所有配置和组件,因为数据库根本不会有facebook的编译输出。然而,给定相同的JAR配置,问题仍然存在。Spring在编译时扫描包中的组件并注册它们,所以您必须在Spring的注释处理开始之前排除这些模块。还有一件事,此打包编译输出需要定义哪个模块具有依赖性或没有依赖性,所以,如果你这样做,你可以为每个模块创建不同的spring上下文。我通过gradle声明依赖关系,我说过,“数据库”与“facebook的东西”没有任何依赖关系,不是gradle,也不是通过将输出编译到jar。我已经查过那两个地方了。问题是数据库模块在编译时仍然不知何故知道facebook的东西(这是错误的),但在运行时不知道(找不到它)(这没关系)。