Java 软件设计和循环Maven依赖
我的应用程序设计中有一个问题。我有一个item viewer应用程序,我们称之为Java 软件设计和循环Maven依赖,java,maven,Java,Maven,我的应用程序设计中有一个问题。我有一个item viewer应用程序,我们称之为V,并希望通过一个编辑器项目对其进行扩展,我们称之为E E依赖于许多类的V,因为它提供了项目的图形预览。因此E存在一个Maven依赖关系E->V。现在我想将E集成到V,因为用户应该能够从查看器中启动编辑器。这意味着我还有一个Maven依赖项V->E,这会导致依赖循环。我尝试了不同的scope值,但未能打破循环。我怎样才能做到这一点 V项目是一个非常单一且结构不好的代码组,我不想分割它。在E项目中,我可以做任何我想做的
V
,并希望通过一个编辑器项目对其进行扩展,我们称之为E
E
依赖于许多类的V
,因为它提供了项目的图形预览。因此E
存在一个Maven依赖关系E
->V
。现在我想将E
集成到V
,因为用户应该能够从查看器中启动编辑器。这意味着我还有一个Maven依赖项V
->E
,这会导致依赖循环。我尝试了不同的scope
值,但未能打破循环。我怎样才能做到这一点
V
项目是一个非常单一且结构不好的代码组,我不想分割它。在E
项目中,我可以做任何我想做的事情(事实上,它已经由许多小项目组成)。您需要编写视图代码来使用接口而不是类;无论如何,这是一种最佳做法。将相关的接口
文件放在模块fooapi
中,然后根据fooapi
将foo域
和foo视图
划分为每个项目的api部分(基本上是从另一个项目调用的接口)。这将为您提供如下依赖关系:
v -> Vapi
E -> Vapi
V -> Eapi
E -> Eapi
没有循环
如果您不想拆分V,这样的方案可能有效:
E -> V
E -> Eapi
V -> Eapi
我同意这一点,但很难分割
V
。我更新了这个问题。我也尝试过,但是当我构建一个包含V
(使用maven shade插件)的Jar时,它不包含E
库。为什么要这样做?它不依赖于E。要获得一个工作系统,您需要构建E。但是,如果所有东西都过于紧密地耦合在一起,无法进行干净的分割,那么您唯一的选择就是将所有东西都放在一个项目中。我尝试将E
添加为运行时依赖项,但再次运行到一个循环中。@Stephan是的,V只是一个模块,不能单独使用。完整的代码只包含在E构建中。