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

How to solve a cyclic project dependency in Eclipse. Any way to make one of the dependencies runtime only?

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

更深入一点:

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

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

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

是否有任何正确的方法来指定另一个项目仅依赖于 "runtime",而不依赖于 "compile" 并避免 Eclipse 中的循环冗余?


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

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

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

在 Maven 中,依赖项有一个范围。它们可以声明为 "compile"、"runtime"、"test" 等

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

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

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

您可以将循环依赖项目问题的严重性从错误降低到警告项目如下(不推荐):

  1. 项目 > 属性中:Java 编译器 > 构建
    1. 选中复选框启用项目特定设置
    2. 构建路径问题部分选择循环依赖 警告而不是错误

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

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

结果:

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

以及依赖项:

  • 项目1 --- 不依赖

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

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

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

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

感谢您一如既往的帮助!