17

Eclipse 中的问题日志显示“在项目的构建路径中检测到循环......”知道如何摆脱这些循环依赖关系吗?我不知道哪些项目相互依赖。

4

7 回答 7

17

您可以在 Eclipse 中调整循环依赖的严重性:

Preferences > Java > Compiler > Building > Build path problems > Circular dependencies
于 2013-06-20T08:06:44.003 回答
4

eclipse中去除项目间循环依赖的三种方式,

1.转到项目-> java 编译器-> 构建-> 启用项目特定设置。
选择构建路径问题并给出警告作为循环依赖的选项。

2.转到项目-> java构建路径。在项目选项卡中,选择项目并删除。

3.转到您的 META-INF 文件夹,打开 MANIFEST.MF。在您的 MANIFEST.MF 视图选项卡中,您可以在“导入包:”列中看到循环依赖项目。
从列中删除项目。

第一个选项并不能真正解决错误。第二个和第三个选项是解决这种依赖关系的正确方法。

于 2015-05-21T04:56:46.490 回答
3

在项目设置中,您可以看到依赖项,您可以做的是删除所有依赖项并一个接一个地添加一个 dep。一个循环意味着你不应该那样做。确定类后您的解决方案,假设您的大项目 A 需要二级项目 B 的 CB1 类,而 CB1 需要项目 A 的 CA1 类:

  • 在项目 A 中移动一个类 CB1 以删除依赖项-> 如果它不创建更多依赖项,则可以使用。
  • 提取接口并使用非依赖接口(您可能需要根据您的结构创建超类或更多接口)。
  • 实现方式不同,为什么你特别需要其他项目的课程?尝试使用公共父类(如果有)
于 2013-06-20T08:29:22.833 回答
2

Eclipse 中的循环依赖表示 Eclipse 中项目之间的构建路径存在循环。

因此,如果您有 5 个项目,例如 A、B、C、D 和 E,那么循环依赖可能是:

  1. A 在其构建路径中需要 B
  2. B 在其构建路径中需要 D
  3. D 在其构建路径中需要 A

因此A->B->D->A是一个循环。

因为这个循环,Eclipse 不知道先编译哪个项目。

您需要重构代码以消除这种循环依赖。或者,如果实际代码没有这样的依赖关系,请删除不必要的构建路径条目。

于 2013-06-20T08:15:51.053 回答
0

To find out the dependencies between plain Java projects, go see Project Properties | Java Build Path | Projects. If you have J2EE projects, there is an additional setting in Project Properties | Project References. Check those for all your projects, build the graph on a piece of paper (or screen) and see what you can do to break the cycle.

Usually, a healthy dependency graph has the form of a star, with a core project containing common resources, and each leaf project implementing some specific user functionality. In detail, the core may in fact consist of several interdependent projects; same for larger leafs.

A typical way out of a dependency cycle is the merging of several closely coupled projects.

于 2013-06-20T08:27:15.697 回答
0

您可能必须重构您的项目或代码本身。与您的应用程序打包可能存在问题。

于 2013-06-20T08:29:46.803 回答
-1

我很久以前就遇到过这个问题,即使我已经忘记了我是如何解决这个问题的,但是当涉及从所需项目中的一个类与需要项目中的一个类进行通信时,我让 sendee 安装了一个 java发送方中的 .lang.reflect.Method 对象,无需在发送方代码中声明 sendee 类即可调用它。

我确信有一些首选的方法可以做到这一点,例如让发送者和发送者共享一个接口,但就编码经济而言,这似乎是最简单的。

正如其他答案似乎暗示的那样,这似乎不是真正的循环,而是 Eclipse 设计的产物。

于 2015-02-12T19:46:18.147 回答