Java 软件设计和循环Maven依赖

Java 软件设计和循环Maven依赖,java,maven,Java,Maven,我的应用程序设计中有一个问题。我有一个item viewer应用程序,我们称之为V,并希望通过一个编辑器项目对其进行扩展,我们称之为E E依赖于许多类的V,因为它提供了项目的图形预览。因此E存在一个Maven依赖关系E->V。现在我想将E集成到V,因为用户应该能够从查看器中启动编辑器。这意味着我还有一个Maven依赖项V->E,这会导致依赖循环。我尝试了不同的scope值,但未能打破循环。我怎样才能做到这一点 V项目是一个非常单一且结构不好的代码组,我不想分割它。在E项目中,我可以做任何我想做的

我的应用程序设计中有一个问题。我有一个item viewer应用程序,我们称之为
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构建中。