如何在Eclipse中解决循环项目依赖项。有没有办法只使用其中一个依赖运行时?

时间:2018-02-04 15:36:13

标签: java eclipse maven circular-dependency

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

更深入一点:

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

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

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

我设法完成这项工作的方式是我将项目2 中的“bin”文件夹作为依赖项添加到项目1 以及所有项目2 依赖关系(基于maven)。这虽然使整个项目完全绑定到我的系统,因为所有路径都调整到我的计算机设置。

是否有任何正确的方法来指定另一个项目仅依赖于“运行时”,而不是“编译”并避免Eclipse中的循环冗余?

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

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

  • 项目1 ---在运行时依赖于---> 项目2

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

在Maven中,依赖项具有范围。它们可以声明为“编译”,“运行时”,“测试”等。

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

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

答案 2 :(得分:0)

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

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

结果:

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

依赖项:

  • 项目1 ---取决于什么

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

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

同样,我可以从 Project 0 启动 Project 1 ,同时在类路径上启用 Project 2 (所以项目1 < / strong>可以根据需要找到 Project 2

我将来自@howlger的回复标记为已接受,因为它也解决了我的问题。但是,如果我的问题不太明白,我会在这里把我最终解决的问题放在这里,以防其他人试图像我一样有所帮助。

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