代码之家  ›  专栏  ›  技术社区  ›  Mauli

在项目xxx的生成路径中检测到周期-生成路径问题

  •  40
  • Mauli  · 技术社区  · 15 年前

    我正在使用maven和eclipse将我的项目转换成osgi包。maven构建的东西很好,只有我在eclipse中得到了上面的错误。我怎样才能找出是哪个项目造成的?有什么特别的风景吗?我希望maven也能检测到循环依赖项,这怎么可能发生呢?

    更新

    好吧,我发现了一些东西 here 在这里

    这可能是由felix maven bundle插件引起的吗?该插件对每个导出都做一个导入?

    16 回复  |  直到 5 年前
        1
  •  77
  •   alex    8 年前

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

    在eclipse中转到:

    Windows & gt;首选项& gt;java>编译器& gt;循环依赖关系

        2
  •  10
  •   Student    8 年前

    当工作区中有多个项目时,我们必须设置项目之间的引用,而不是项目之间的引用。如果p1引用p2,p2引用p3,p3引用回p1。这会导致一个循环。

    解决方案是绘制工作区中项目之间的引用关系图。检查每个项目的Java构建路径,以查看项目窗口的选项卡。取出引用回主项目的项目,例如上面这个例子中的p3引用p1。

    具体操作是在rad或eclipse中选择p3项目,右击项目,选择properties选项,弹出p3属性的新窗口。点击“Java构建路径”部分,选择“项目”选项Tab。可以看到p3在字段中引用了p1。选择p1引用,单击窗口右侧的“删除”按钮。然后,单击“确定”。IDE将开始自动重置路径。

    完成。

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

        3
  •  7
  •   garrett.patterson    13 年前

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

    1. 删除项目A到项目B的引用
    2. 试着跑东西,它会坏的
    3. 重新添加引用
    4. 清洁/清洁和建造
    5. 重操旧业
        4
  •  4
  •   SteveD    15 年前

    简单地说,一个循环是当bundle a依赖于bundle b时,bundle b依赖于bundle a。如果这是源代码,那么就无法在一次过程中分别构建bundle。

    因为这个问题只在eclipse中出现,所以它可能是一个二进制循环依赖项,而不是 到源代码循环依赖项。

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

    如果循环在您的代码中,那么我建议通过将一些代码分解到第三个包来删除循环依赖关系来重构代码。

    注意,如果您使用的是osgi片段(单元测试的常见模式),因为引入周期非常容易。

    eclipse的manifest编辑器在“dependencies”选项卡上确实有查找周期的功能(您需要单击“dependencies analysis”),但我从未见过它显示周期,即使eclipse有一个大的红色x告诉我有一个周期!

        5
  •  3
  •   ataulm    11 年前

    问题

    我有一个老项目,测试字典接口的两个不同实现。一个是未排序的arraylist,另一个是hashtable。这两个实现是定时的,因此可以进行比较。可以从命令行参数中选择数据结构。现在。。我有另一个数据结构是树结构。我想测试它的时间,以便与哈希表进行比较。所以…在新的数据结构项目中,我需要实现字典接口。在dictionary项目中,我需要能够添加特定于我的新数据结构项目的代码。存在循环依赖关系。这意味着当eclipse去找出哪些项目依赖于项目a时,它会找到项目b。当它需要找出依赖项目的子依赖项时,它会找到a,这又是依赖于b。没有树,而是一个带循环的图。

    解决方案

    如果要配置生成路径,请转到“库”选项卡,而不是输入依赖项目(“项目”选项卡)。单击“添加类文件夹…”按钮(假设引用的项目位于工作区中),然后选择类文件夹。我的是目标。选择此文件夹作为库文件夹。在项目A中执行此操作,以引用项目B。在项目B中执行此操作,以引用项目A。请确保没有引用\target\projectnamefolder,或者没有匹配的导入。现在,您不必移除依赖项,然后重置它,以便强制重新生成。

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

        6
  •  2
  •   marc_s HarisH Sharma    5 年前

    有时标记为警告

    Windows & gt;首选项& gt;java>编译器& gt;循环依赖关系

    并不能解决这个问题,因为eclipse不会编译依赖项中有其他未编译项目的项目。

    所以为了解决这个问题,您可以尝试强制eclipse编译它能够编译的每个类。

    为了让这一切变得公正:

    1. 取消选择

    Windows & gt;首选项& gt;java>编译器& gt;构建& gt;在生成路径错误时发生异常生成

    1. 清理和重建所有项目

    项目->清理…

    1. Reselect:

    Windows & gt;首选项& gt;java>编译器& gt;构建& gt;在生成路径错误时发生异常生成

    如果选择了自动生成,则无需每次更改代码时都执行此操作

        7
  •  1
  •   Rich Seller    15 年前

    马文 如果检测到循环,则生成失败,因为依赖项必须是树。

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

        8
  •  1
  •   AlBlue RACGAMERUP    15 年前

    除了依赖项管理的require bundle形式(最类似于maven的pom依赖项),还可以有导入包依赖项。使用import包引入循环依赖比使用bundle要容易得多,但是使用ymmv。

    此外,eclipse项目有一个“项目引用”,它说明它依赖于哪些其他项目。eclipse在较高的层次上使用它来决定要构建什么项目,以及按照什么顺序构建,因此很可能manifest.mf正确地列出了所有内容,但是项目引用不正常。在项目上单击鼠标右键,然后转到“属性”-您将看到所依赖的项目。如果您是文本类型的人,请打开.project文件并查看您依赖于哪些文件-很可能是在该级别定义了一个项目循环链接(通常是在您具有a-b依赖关系,然后从b-a转换而不更新.project引用时导致的)。

        9
  •  1
  •   Petr Gladkikh    14 年前

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

        10
  •  0
  •   djna    15 年前

    当我遇到这些问题时,在manifest.mf中表示的依赖项中总是一个真正的循环。

    所以打开这个项目的清单,在dependencies选项卡上,查看“RequiredPlugins”条目。然后从那里到下一个项目,然后重复,最终循环将变得清晰。

    通过使用Dependencies选项卡右下角的Dependency analysis链接,您可以稍微简化此任务,它具有循环检测和更轻松的导航深度。

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

        11
  •  0
  •   sjchoudary    11 年前

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

        12
  •  0
  •   user3235783    11 年前

    重新启动eclipse就解决了我项目中的问题

        13
  •  0
  •   Machado    10 年前

    尽管“标记循环依赖项”使您能够编译代码,但它可能会导致较慢的环境和将来的问题。

    之所以发生这种情况,是因为在某个时刻,eclipse已经失去了它在构建路径上的方向。

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

    这是最好的解决办法。

        14
  •  0
  •   MansoorShaikh    7 年前

    我今天也面临同样的问题。这个错误很容易出错。我错加了循环依赖项。A依赖于B。在我的例子中,除了把B作为依赖添加到A之外,我也把A作为依赖添加到B。这是个愚蠢的错误。

        15
  •  0
  •   Rain    7 年前

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

        16
  •  0
  •   Camilo    7 年前

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

    这解决了我的问题。