maven多模块项目中的循环引用。我该怎么做才能解决它

时间:2018-03-21 20:27:17

标签: java spring maven

我正在完成一项任务,我应该设计一个分为模块的简单电话簿应用程序。

  • phonebook-api:从xsd文件生成的jaxb类,存储库,DAO和服务的接口。
  • phonebook-server:它包含存储库,DAO和服务的实现。它还有用于将xml导入数据库的类。
  • phonebook-web:此模块具有存储库,服务等所需的所有配置。此外,它还具有数据库配置。它被用来生成DAO和SQL脚本用来创建一个简单的表在电话簿数据库存储的联系人DBI类的几个XML文件(它只有一个表)。此外,该模块还有一个简单的控制器。
  • phonebook-client:简单的MBeans应用程序。

现在就是这种情况:

  • phonebook-api模块依赖于phonebook-web,因为它需要这些DBI类用于DAO接口
  • phonebook-server模块依赖于phonebook-api,因为它需要存储库,DAO,服务的接口。由于这些生成的DBI类,它还取决于phonebook-web。
  • phonebook-web模块依赖于这两个模块,因为它们是配置所必需的。

所以,有循环参考。你能帮我解决这个设计问题吗?

1 个答案:

答案 0 :(得分:3)

答案在你的问题中。问题在于设计。解决方案的关键是为每个模块分配不同的目的,分离关注点并避免相互依赖。

您可以探索的其他选项包括

  • 这里的反模式似乎是你依赖image/jpeg模块。这不太可能是理想的。您应该避免将模块依赖于高达堆栈的单元。 这是我首先尝试更改:将电话簿网络中的共享代码提取到其中一个共享模块中。

  • 制作较小的模块。 Maven对此没有任何问题。
    如果web取决于abc取决于b for java package a,那么你可以将包dc提取到一个单独的模块中,da都具有相关性。

  • 检查您是否真的需要单独的模块。
    也许在单独的模块中考虑bphonebook-apiphonebook-server并不是必需的。除非您打算在不同的应用程序中重用这些模块,否则最好将单phonebook-web与所有当前模块一起使用。代码。