maven Quarkus多模循环参考问题

zzzyeukh  于 2022-11-02  发布在  Maven
关注(0)|答案(1)|浏览(165)

这是我第一个使用Quarkus的项目。
我做了一个多模块项目,在父pom中我有这样的模块结构:

<modules>
        <module>domain</module>
        <module>application</module>
        <module>client</module>
    </modules>

在我的domain模块中,我有我的接口,这些接口应该由applicationclient模块实现。因此,我在applicationclient模块中添加了<dependency>,用于实现domain接口。
但是当我想在我的domain中添加application模块的<dependency>时,它不起作用,当我构建时,我遇到了这个错误:
[错误] [错误]React器中的项目包含循环指涉:“顶点{label ='com.test.name:application:0.0.1-SNAPSHOT'}”和“顶点{label ='com.test.name:domain:0.0.1-SNAPSHOT'}”之间的边在图形中引入了循环com.test.name:domain:0.0.1-SNAPSHOT --〉com.test.name:application:0.0.1-SNAPSHOT --〉com.test.name:domain:0.0.1-SNAPSHOT @ [错误]React器中的项目包含循环引用:在“顶点{标签=”com.test.name:应用程序:0.0.1-快照“}”和“顶点{标签=”com.test.name:域:0.0.1-快照“}”之间的边引入了图中的循环com.test.namecom.test.namecom.test.name
我需要这个来进行依赖注入,我的CDI容器需要找到实现来注入它。有人有解决方案吗?

kmpatx3s

kmpatx3s1#

我喜欢的项目结构大致如下:

  • 包含依赖于其他模块的接口的模块,类似于您的domain模块。它们可以是细粒度的,也可以是粗粒度的,这取决于您的设计要求。例如app-service-interfaces(例如,业务逻辑的接口)、app-dao-interfaces(DAO层的接口)等。
  • 包含单个“接口”模块的实现的模块。实现模块仅依赖于接口模块,显然是它们实现的接口模块和它们需要的任何其他接口模块。例如,模块app-service-impl依赖于并实现app-service-interfaces模块。而且还依赖于app-dao-interfaces模块,因为它需要访问应用程序的数据存储设施。如果我选择对DAO层使用JPA,app-dao-interfaces的实现可能是app-dao-jpa。保持接口模块不依赖于用于实现它们的实际技术,这允许您轻松地切换实现。)
  • 接口和实现模块都不依赖于我打算部署的特定环境; Quarkus、JEE、Spring、Play等等。
  • 最后,一个模块、我称之为“汇编”模块(从我们的.Net同事那里借用的术语),这取决于我打算部署的所有实现模块以及特定环境(例如,本例中的Quarkus)。此模块可能包含某些组件的环境特定实现(例如,用于在Quarkus环境中读取和保存配置的组件的Microprofile Config实现)。
    2条最终意见:
  • 这是一个对我有用的解决方案,我相信还有很多其他的解决方案也同样有效;或者这可能不适用于您的任何原因!
  • 我已经在this pet project中应用了这个原理,并且在这个更早的、被放弃的同一项目的化身中有相关的解释。小心,这些只是刮擦项目:)

相关问题