【问题标题】:A cycle was detected in the build path of project xxx - Build Path Problem在项目 xxx 的构建路径中检测到循环 - 构建路径问题
【发布时间】:2010-11-08 06:20:24
【问题描述】:

我正在使用 maven 和 eclipse 将我的项目转换为 OSGI 包。 Maven 构建的东西很好,只有我现在在 Eclipse 中得到了上述错误。我怎样才能找出是哪个项目导致了这种情况?有什么特别的看法吗?怎么会这样,我希望maven也能检测到循环依赖?

更新

好的,我发现了一些东西 herehere

这可能是由 felix maven-bundle-plugin 造成的,它为每个导出也做一个导入?

【问题讨论】:

  • 重要的安全提示。 Maven 命令行检测一个反应器内的循环。如果仅通过激活配置文件来公开循环,那么您的命令行构建将不会报告错误,而您的 Eclipse 构建可能会报告错误。如果您尝试对此进行调试,请务必激活所有配置文件以包含您的所有模块(例如,mvn -Pcore,buildtools dependency:tree),否则您可能会错过问题。
  • 链接已损坏(无论如何它们都是相同的)。

标签: java eclipse maven-2 osgi bundle


【解决方案1】:

在 Eclipse 工具中将循环依赖项标记为“警告”以避免“在构建路径中检测到循环”错误。

在 Eclipse 中转到:

Windows -> 首选项 -> Java-> 编译器 -> 构建 -> 循环依赖

【讨论】:

  • 这个答案是正确的,因为使用 gradle 的开源项目具有循环依赖,并且它们可以在 gradle 上构建。 eclipse 不应该因为这个错误而哭泣
  • 当我这样做时,错误从 6 上升到 2000+。
  • 如何永久删除此警告。它会导致我的一些问题,例如是否有未使用的导入。
  • 在我的情况下,当我进行此更改时,错误也从 15 变为 2000+。还有其他解决方案吗?
  • 我认为这不是一个合适的解决方案,因为我们应该始终解决循环依赖关系。
【解决方案2】:

当我们在工作空间中有多个项目时,我们必须设置项目之间的引用,而不是项目之间的引用。如果 P1 引用 P2,P2 引用 P3,P3 引用回 P1。这将导致一个循环。

解决方案是在工作空间中绘制项目之间的引用关系图。检查每个项目的 Java Build Path 以查看 Projects 窗口的选项卡。取出引用主项目的项目,例如在上面的示例中,P3 引用了 P1。

具体操作是在RAD OR eclipse中选择P3项目,在项目上右击选择属性选项,会弹出一个新的P3属性窗口。单击“Java Build Path”部分,选择“Projects”选项选项卡。您可以看到 P3 在字段中引用了 P1。选择 P1 引用,单击窗口右侧的“删除”按钮。然后,点击确定。 IDE 将开始自动重置路径。

完成。

继续查找每个项目中所有错误引用的引用,直到您对图表中的每个项目都有正确的引用。祝你好运!

【讨论】:

  • 但是如果有P1引用的情况,P2引用P1。例如。 P1 包含 DAO 层代码,P2 包含实用程序。实用程序有时使用 DAO 层从 DB 表中获取配置属性,而 DAO 层使用实用程序。那么如何解决这个问题呢?
  • 我也有同样的问题@Sanjeev。有解决办法吗,求分享...
  • @SanjeevKumarDangi 可能会将特定于 DAO 的实用程序放在 DAO 项目中。
【解决方案3】:

我有这个是因为一个项目引用了另一个。

  1. 从项目 A 中删除对项目 B 的引用
  2. 尝试运行东西,它会坏
  3. 重新添加参考
  4. 清理/清理并构建
  5. 恢复营业

【讨论】:

    【解决方案4】:

    简单来说,一个循环就是bundle A依赖bundle B,而bundle B又依赖于bundle A。如果这是源代码,那么没有办法一次性单独构建bundle。

    由于该问题仅在 Eclipse 中显示,因此它可能是二进制循环依赖,而不是 到源代码循环依赖。

    在最新版本的 Eclipse 中支持二进制循环:Eclipsesource Blog

    如果循环在您的代码中,那么我建议通过将一些代码分解为第三个捆绑包来重构代码以消除循环依赖。

    并注意您是否使用 OSGi 片段(一种常见的单元测试模式),因为它很容易引入循环。

    Eclipse 的清单编辑器在“依赖项”选项卡上确实具有查找循环的功能(您需要单击“依赖项分析”),但我从未见过它显示循环,即使 Eclipse 有一个大的红色 X 告诉我有一个循环!

    【讨论】:

    • 感谢您提供有关 Eclipse 清单编辑器“依赖分析 > 查找周期”功能的提示。它确实显示了循环(但仅在循环中的一个包中)。
    【解决方案5】:

    有时标记为警告

    Windows -> 首选项 -> Java-> 编译器 -> 构建 -> 循环依赖

    没有解决问题,因为eclipse不编译依赖项中有另一个项目未编译的项目。

    所以要解决这个问题,你可以尝试强制 Eclipse 编译它能够编译的每个类。

    为了做到这一点:

    1. 取消选择

    Windows -> 首选项 -> Java-> 编译器 -> 构建 -> 发生构建路径错误时中止构建

    1. 清理并重建所有项目

    项目 -> 清理...

    1. 重新选择:​​i>

    Windows -> 首选项 -> Java-> 编译器 -> 构建 -> 发生构建路径错误时中止构建

    如果您选择了自动构建,那么每次更改代码时都不需要这样做

    【讨论】:

      【解决方案6】:

      我不久前遇到了类似的问题,并决定编写 Eclipse 插件,以显示 Java 项目的完整构建路径依赖树(虽然不是图形模式 - 结果写入文件)。插件的来源在这里http://github.com/PetrGlad/dependency-tree

      【讨论】:

        【解决方案7】:

        问题

        我有一个旧项目,它测试 Dictionary 接口的两种不同实现。一个是未排序的 ArrayList,另一个是 HashTable。这两个实现是定时的,因此可以进行比较。您可以从命令行参数中选择哪种数据结构。现在..我有另一个数据结构,它是一个树结构。我想测试它的时间,以便将它与 HashTable 进行比较。所以..在新的dataStructure项目中,我需要实现Dictionary接口。在 Dictionary 项目中,我需要能够添加特定于我的新 dataStructure 项目的代码。存在循环依赖。这意味着当Eclipse去查找哪些项目依赖于项目A时,它会找到项目B。当它需要查找依赖项目的子依赖时,它会找到A,这又是依赖于B。没有树,而是有循环的图。

        解决方案

        当您配置构建路径时,不要输入依赖项目(“项目”选项卡),而是转到“库”选项卡。单击“添加类文件夹...”按钮(假设您引用的项目在您的工作区中),然后选择类文件夹。我的是\目标。选择它作为库文件夹。在项目 A 中执行此操作,以引用项目 B。在项目 B 中执行此操作以引用项目 A。确保您没有引用 \target\projectNameFolder,否则您将没有匹配的导入。现在,您不必删除依赖项然后重新设置它,即可强制重建。

        使用类库而不是项目引用。

        【讨论】:

        • 我更喜欢项目引用,因为它允许我在不同项目的源代码之间跳转(使用类库让我最终进入二进制文件,然后我不得不手动去寻找相应的源文件- 这是一个令人头疼的问题)。但是,在这种循环依赖的情况下,我只能通过让 A 引用 B 作为项目引用,而 B 引用 A 作为类库来解决它。为了解决循环依赖问题,我不得不做一些牺牲。
        【解决方案8】:

        Maven 如果检测到循环,则构建失败,因为依赖项必须是树。

        您可能会发现 manifest.mf 中的声明比 pom.xml 中定义的声明多。任何额外的声明都可能引入一个对 Maven 来说不明显的循环。

        【讨论】:

          【解决方案9】:

          除了 Require-Bundle 形式的依赖管理(最类似于 Maven 的 pom 依赖),还可以有 Import-Package 依赖。使用 Import-Package 引入循环依赖比使用 Require-Bundle 容易得多,但是 YMMV。

          此外,Eclipse 项目有一个“项目引用”,它说明它依赖于哪些其他项目。 Eclipse 在较高级别使用它来决定要构建哪些项目以及以何种顺序构建,因此您的 Manifest.MF 很可能正确列出了所有内容,但项目引用不正常。右键单击一个项目,然后转到属性 - 您将看到您依赖的项目。如果您是文本类型的人,请打开 .project 文件并查看您在那里依赖哪些文件 - 很可能是在该级别定义了项目循环链接(通常在您有 AB 依赖项时引起,然后从 BA 翻转但未更新 .project 引用)。

          【讨论】:

          • +1 用于提及 .project 文件的 Eclipse 问题。有时唯一的解决方案是丢弃与 Eclipse 相关的所有内容,让它再次从 pom 中解决。
          【解决方案10】:

          当我遇到这些问题时,在 Manifest.mf 中表达的依赖关系中始终是一个真正的循环

          因此,打开相关项目的清单,在 Dependencies 选项卡上,查看“Required Plugins”条目。然后从那里继续下一个项目,并重复,最终循环将变得清晰。

          您可以通过使用“依赖项”选项卡右下角的“依赖项分析”链接来稍微简化此任务,这具有循环检测和更轻松的导航依赖项。

          我也不知道为什么Maven更宽容,

          【讨论】:

            【解决方案11】:

            尝试删除引用并将其添加回来,有时 Eclipse 的行为很奇怪,因为除非您修复该错误,否则它不会允许您刷新。所以尝试删除所有依赖项目并将其添加回来 清理和构建

            【讨论】:

              【解决方案12】:

              重启 Eclipse 解决了我项目中的问题

              【讨论】:

                【解决方案13】:

                虽然“Mark Circular Dependencies”可以让你编译代码,但它可能会导致环境变慢和未来的问题。

                发生这种情况是因为 Eclipse 在某些时候失去了它在您的构建路径上的方向。

                1 - 从工作区中删除项目及其引用。 2 - 再次导入。 3 - 检查参考资料。

                这是最好的解决方案。

                【讨论】:

                  【解决方案14】:

                  我今天也遇到了同样的问题。这个错误很恰当。错误地,我添加了循环依赖。 A 依赖于 B。在我的情况下,错误地,除了将 B 添加为依赖于 A 之外。我也将 A 添加为依赖于 B。这是一个愚蠢的错误。

                  【讨论】:

                    【解决方案15】:

                    我也有这个问题。我只是禁用了工作区分辨率,然后一切正常。enter image description here

                    【讨论】:

                    • 这不是问题的解决方案。 Maven 抱怨工件的循环依赖。它会产生问题。
                    【解决方案16】:

                    当您有多个以 JAR 形式相互包含的项目时,可能会发生这种情况。 我所做的是为所有项目删除构建路径上的所有库和项目依赖项。然后,一次一个,我在项目选项卡上添加了项目依赖项,但只添加了需要的那些。 这是因为您可以添加一个项目,该项目本身已被引用,或者另一个项目正在引用具有此自引用问题的其他项目。

                    这解决了我的问题。

                    【讨论】:

                      【解决方案17】:

                      Eclipse 有一个错误,它报告了比需要更多的周期。 2019-12 版本已修复此问题。见https://bugs.eclipse.org/bugs/show_bug.cgi?id=551105

                      【讨论】:

                        猜你喜欢
                        • 2014-06-26
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2017-10-19
                        • 2021-11-26
                        • 2020-07-30
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多