如何在 Eclipse 中解决循环项目依赖关系.有什么方法可以使依赖项之一仅在运行时运行?



我有一个基本上由 2 个模块组成的项目。我有一个Eclipse工作区和2个Java项目(maven),它们代表了这两个模块。

更深入一点:

  • 项目1:核心模块(具有核心实现和API接口)
  • 项目2:辅助模块(服务器)

项目2需要将项目 1作为依赖项,以便在编译时访问 API 接口。但问题是项目1需要项目 2才能正常工作(不过这只是运行时要求)。

因此,当我在每个项目中添加另一个项目作为依赖项时,会显示循环依赖项错误,因为 Eclipse 不知道以哪个顺序编译类。

我设法完成这项工作的方法是,我将项目 2 中的"bin"文件夹作为依赖项添加到项目1以及所有项目 2依赖项(基于 maven)。不过,这使得整个项目完全绑定到我的系统,因为所有路径都根据我的计算机设置进行了调整。

有没有正确的方法可以将另一个项目指定为仅依赖于"运行时",而不是依赖于"编译"并避免 Eclipse 中的循环冗余?


以更直观的方式解释。我需要的是:

项目
  • 2--- 编译期间取决于项目 1--->

  • 项目 1--- 运行时取决于项目 2--->

Eclipse 可以处理循环项目依赖关系,但默认情况下,循环依赖关系将报告为错误,原因充分(将代码拆分为具有循环依赖关系的项目是没有意义的)。

可以将两个项目的循环依赖项项目问题严重性从">错误"降低到"警告",如下所示(不推荐):

  1. "项目>属性:Java 编译器>生成">
    1. 中,选中"启用项目特定设置"复选框,然后
    2. 在">生成路径问题"部分中,为">循环依赖项"选择">警告"而不是"错误
    3. "

在 Maven 中,依赖项有一个作用域。它们可以声明为"编译"、"运行时"、"测试"等。

可以在项目 2 中声明对项目 1 的编译依赖项,在项目 2 上声明对项目 1 的运行时依赖项。我从未尝试过以这种方式定义依赖项,但它可能会起作用。

但是,更重要的是:如果没有Project2就无法使用Project1,反之亦然,为什么它们是不同的项目?

因此,根据@JF-Meier的评论,我找到了另一种方法来完成这项工作。整个想法基本上是将项目 2 松散地耦合到项目 1,以允许项目2与其他实现交换,同时仍然是项目 1工作的重要组成部分。

为了解决循环依赖问题,我刚刚创建了另一个项目,该项目将项目 1 和项目2设置为依赖项,然后从那里启动项目 1这为我解决了循环依赖问题,一切正常。

结果:

项目
  • 0:启动器以启动项目 1
  • 项目1:核心模块(具有核心实现和API接口)
  • 项目2:辅助模块(服务器)

和依赖关系:

  • 项目 1--- 什么都不依赖

  • 项目
  • 2---取决于项目 1--->

  • 项目
  • 0---取决于项目1项目 2--->

像这样,我可以从项目0启动项目 1,同时将项目 2 放在类路径上(因此项目 1 可以根据需要找到项目 2)。

我将@howlger的回复标记为已接受,因为它也解决了我的问题。但是,如果我的问题不太容易理解,我在这里提出我最终如何解决它,以防它可能对像我一样试图实现相同目标的其他人有所帮助。

感谢一如既往的所有帮助!

最新更新