在项目xxx – 构buildpath问题的构buildpath中检测到一个循环

我正在使用maven和eclipse将我的项目转换为OSGI包。 Maven构build的东西就好,只有我现在在Eclipse中得到上述错误。 我怎样才能找出哪个项目导致这个? 有没有特别的观点或什么? 这怎么能发生,我希望maven能够检测循环依赖?

更新

好的,我在这里和这里find了一些东西

这可能是由felix maven-bundle-plugin导致的,每个导出都会导入吗?

在Eclipse工具中将循环依赖关系标记为“警告”,以避免“在构buildpath中检测到循环”错误。

在Eclipse中转到:

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

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

解决scheme是绘制工作区中的项目之间的参考图。 检查每个项目的Java Build Path以查看Projects窗口的Tab。 在上面的示例中,取出引用到主项目的项目,例如P3引用P1。

具体操作是在RAD或者eclipse中selectP3工程,右键单击工程,select属性选项,打开P3属性的新窗口。 点击“Java Build Path”部分,select“Projects”选项卡。 您可以看到P3已经在该字段中引用了P1。 selectP1参考,点击窗口右侧的“删除”button。 然后,点击确定。 IDE将开始自动重置path。

完成。

在每个项目中保持find所有错误引用的引用,直到对图中的每个项目都有正确的引用。 祝你好运!

我有这个由于一个项目引用另一个。

  1. 从项目A中删除参考项目B
  2. 尝试运行的东西,它会打破
  3. 重新添加参考
  4. 清洁/清洁和build立
  5. 回到工作

问题

我有一个旧的项目,testing字典接口的两个不同的实现。 一个是未sorting的ArrayList,另一个是HashTable。 这两个实现是定时的,所以可以进行比较。 您可以从命令行参数中select哪个数据结构。 现在..我有另一个数据结构是一个树形结构。 我想testing它的时间,以便将其与HashTable进行比较。 所以..在新的dataStructure项目中,我需要实现Dictionary接口。 在Dictionary项目中,我需要能够添加特定于我的新的dataStructure项目的代码。 有一个循环依赖。 这意味着,当Eclipse去找出哪个项目依赖于项目A,然后find项目B.当需要找出依赖项目的子依赖项时,它findA,这又依赖于B.没有树,而是一个循环的图。

当你去configuration你的构buildpath,而不是进入依赖项目('项目'选项卡),转到库选项卡。 单击“添加类文件夹…”button(假定您的被引用的项目在您的工作区中),然后select类文件夹。 我的是目标。 select这个作为一个库文件夹。 在项目A中执行此操作,以引用项目B.在项目B中执行此操作以引用项目A.确保不要引用\ target \ projectNameFolder,否则将不会有匹配的导入。 现在,您不必删除依赖项,然后重置它,以强制重build。

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

简而言之,一个循环是当bundle A依赖于依赖于bundle A的bundle B的时候。如果这是源代码,那么就无法一次单独构buildbundle。

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

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

如果循环是在你的代码中,那么我build议通过分解一些代码到第三个bundle去重构循环依赖。

并注意,如果你使用OSGi片段(unit testing的常见模式),因为它很容易引入周期。

Eclipse的清单编辑器在“Dependencies”选项卡上具有查找循环的function(您需要单击“Dependency Analysis”),但是我从来没有看到它显示了一个循环,即使Eclipse有一个大的红色X,告诉我有一个循环周期!

除了依赖pipe理的Require-Bundleforms(最类似于Maven的pom依赖)之外,也可能有Import-Package依赖关系。 引入循环依赖与Import-Package比Require-Bundle要容易得多,但是YMMV。

此外,Eclipse项目还有一个“项目引用”,它说明了依赖于哪个项目。 Eclipse在很高的层次上使用它来决定要构build什么样的项目,以什么样的顺序,所以你的Manifest.MF很有可能会正确地列出所有的东西,但是项目引用是不合适的。 右键点击一个项目,然后转到属性 – 你会看到你依赖的项目。 如果你是一个文本types的人,打开.project文件,看看哪些依赖于那里 – 可能是一个项目循环链接被定义在该级别(通常是当你有一个AB依赖项,然后从BA翻转,但没有更新.project参考)。

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

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

通过使用“依赖性”选项卡右下angular的“依赖关系分析”链接,可以稍微简化此任务,这样可以检测周期并轻松导航。

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

如果Maven检测到循环,Maven 将会失败,因为依赖必须是一棵树。

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

我刚才遇到类似的问题,并决定编写一个Eclipse插件,它显示了一个Java项目的完整构buildpath依赖关系树(尽pipe不是以graphics模式 – 结果写入文件)。 插件的来源在这里http://github.com/PetrGlad/dependency-tree

尝试删除引用并将其添加回来,有些时候eclipseperformance怪异的,因为直到和除非你修复这个错误,它不会让你刷新。 所以尝试删除所有的依赖关系项目并将其添加回来清理并构build

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

尽pipe“Mark Circular Dependencies”使您可以编译代码,但可能会导致较慢的环境和未来的问题。

发生这种情况是因为在某些时候,Eclipse已经失去了构buildpath的方向。

1 – 删除项目,它是从工作区的参考。 2 – 重新导入。 3 – 检查参考。

这是最好的解决scheme。

我今天面对同样的问题。 错误是适当的。 错误地,我添加了循环依赖。 A依赖于B.在我的情况下,除了把B作为从属添加到A之外,我还把A作为依赖添加到B中。 这是一个愚蠢的错误。

我也有这个问题。我只是禁用了Workspace解决scheme,然后一切正常。 在这里input图像说明