Java maven多模块项目中的循环引用。我能做些什么来修复它
我正在做一项任务,我应该设计一个分为模块的简单电话簿应用程序Java maven多模块项目中的循环引用。我能做些什么来修复它,java,spring,maven,Java,Spring,Maven,我正在做一项任务,我应该设计一个分为模块的简单电话簿应用程序 PhoneBookAPI:从xsd文件生成的jaxb类,用于存储库、DAO和服务的接口 电话簿服务器:它由存储库、DAO和服务的实现组成。它还具有将xml导入数据库的类 phonebook web:此模块具有存储库、服务等所需的所有配置,还具有数据库配置。它有几个xml文件,用于生成DAO和sql脚本中使用的DBI类,以创建一个简单的表来存储电话簿数据库中的联系人(它只有一个表)。此外,该模块还有一个简单的控制器 电话簿客户端:简单
- PhoneBookAPI:从xsd文件生成的jaxb类,用于存储库、DAO和服务的接口
- 电话簿服务器:它由存储库、DAO和服务的实现组成。它还具有将xml导入数据库的类
- phonebook web:此模块具有存储库、服务等所需的所有配置,还具有数据库配置。它有几个xml文件,用于生成DAO和sql脚本中使用的DBI类,以创建一个简单的表来存储电话簿数据库中的联系人(它只有一个表)。此外,该模块还有一个简单的控制器
- 电话簿客户端:简单的MBeans应用程序
- PhoneBookAPI模块依赖于phonebook web,因为它需要这些DBI类作为DAO接口
- 电话簿服务器模块依赖于电话簿api,因为它需要存储库、DAO和服务的接口。由于这些生成的DBI类,它还依赖于电话簿web
- phonebook web模块依赖于这两个模块,因为配置需要它们
所以,有循环引用。你能帮我解决这个设计问题吗?答案在你的问题中。问题在于设计。解决方案的关键是为每个模块指定不同的目的,分离关注点并避免相互依赖 您可以探索的其他选项包括
- 这里的反模式是,您依赖于
模块。这不太可能是理想的。您应该避免模块依赖于堆栈中较高的单元这是我首先尝试更改的内容:将电话簿web中的共享代码提取到一个共享模块中web
- 制作更小的模块。Maven对此没有问题。
如果包
的c
依赖于a
,java包b
的d
依赖于b
,那么您可以将包a
和c
提取到一个单独的模块中,d
和a
都依赖于该模块b
- 检查您是否真的需要单独的模块。
也许在单独的模块中有
、电话簿api
、和电话簿服务器
,根本不需要。除非您打算在不同的应用程序中重用这些模块,否则最好使用一个电话簿网络
电话簿网站
,其中包含所有当前模块的代码
- 这里的反模式是,您依赖于
模块。这不太可能是理想的。您应该避免模块依赖于堆栈中较高的单元这是我首先尝试更改的内容:将电话簿web中的共享代码提取到一个共享模块中web
- 制作更小的模块。Maven对此没有问题。
如果包
的c
依赖于a
,java包b
的d
依赖于b
,那么您可以将包a
和c
提取到一个单独的模块中,d
和a
都依赖于该模块b
- 检查您是否真的需要单独的模块。
也许在单独的模块中有
、电话簿api
、和电话簿服务器
,根本不需要。除非您打算在不同的应用程序中重用这些模块,否则最好使用一个电话簿网络
电话簿网站
,其中包含所有当前模块的代码
- 答案在你的问题中。问题在于设计。解决方案的关键是为每个模块指定不同的目的,分离关注点并避免相互依赖
您可以探索的其他选项包括