java-在项目xxx的构建路径中检测到一个周期-构建路径问题
我正在使用maven和eclipse将项目转换为OSGI捆绑软件。 Maven可以很好地构建这些东西,只有现在我在Eclipse中得到上述错误。 我如何找出导致此问题的项目? 有什么特别的看法吗? 我怎么会期望maven也可以检测到循环依赖关系呢?
更新资料
好,我发现了一些东西这里和这里
这可能是由felix maven-bundle-plugin引起的吗?
16个解决方案
89 votes
在Eclipse工具中将循环依赖项标记为“警告”,以避免出现“在构建路径中检测到循环”错误。
在Eclipse中,请转到:
Windows->首选项-> Java->编译器->构建->循环依赖
user2582855 answered 2020-06-18T13:21:24Z
12 votes
当工作空间中有多个项目时,我们必须在项目之间而不是项目之间设置引用。 如果P1引用P2,则P2引用P3,而P3引用回到P1。 这将导致一个周期。
解决方案是在工作空间中的项目之间绘制参考图。 检查每个项目的Java构建路径,以查看“项目”窗口的“选项卡”。 取出要参考主项目的项目,例如 在上面的示例中,P3引用P1。
详细的操作是在RAD OR eclipse中选择P3项目,右键单击该项目并选择properties选项,这将打开一个有关P3属性的新窗口。 单击“ Java构建路径”部分,选择“项目”选项卡。 您可以在字段中看到P3引用了P1。 选择P1参考,单击窗口右侧的“删除”按钮。 然后,单击确定。 IDE将开始自动重置路径。
做完了
继续找到每个项目中所有被错误引用的引用,直到您对图表中的每个项目都有正确的引用为止。 祝好运!
Jack answered 2020-06-18T13:22:03Z
7 votes
我之所以这样,是因为一个项目引用了另一个项目。
从项目A删除对项目B的引用
尝试运行东西,它会破裂
重新添加参考
清理/清理并构建
回到工作
garrett.patterson answered 2020-06-18T13:22:44Z
4 votes
简而言之,一个周期就是捆绑软件A依赖于捆绑软件B,而捆绑软件B依赖于捆绑软件A。如果这是源代码,则无法一口气地分别构建捆绑软件。
由于该问题仅在Eclipse中显示,因此它可能是二进制循环依赖项,而不是到源代码循环依赖项。
在最新版本的Eclipse中支持二进制循环:Eclipsesource Blog
如果循环在您的代码中,则建议通过将一些代码分解为第3个捆绑包以消除循环依赖关系来重构代码。
并且要注意是否使用OSGi片段(单元测试的常用模式),因为它很容易引入周期。
Eclipse的清单编辑器确实在“ Dependencies”选项卡上具有查找周期的功能(您需要单击“ Dependency Analysis”),但是我从未见过它显示周期,即使Eclipse的红色X告诉我有一个 周期!
SteveD answered 2020-06-18T13:23:27Z
3 votes
问题
我有一个旧项目,该项目测试Dictionary接口的两种不同实现。 一个是未排序的ArrayList,另一个是HashTable。 这两个实现是定时的,因此可以进行比较。 您可以从命令行参数中选择哪种数据结构。 现在..我有另一个数据结构是树结构。 我想测试一下它的时间,以便将其与HashTable进行比较。 因此,在新的dataStructure项目中,我需要实现Dictionary接口。 在Dictionary项目中,我需要能够添加特定于我的新dataStructure项目的代码。 存在循环依赖关系。 这意味着当Eclipse找出哪些项目依赖于项目A时,便找到了项目B。当它需要找出依赖项目的子依赖项时,便找到了A,而后者又依赖于B。 没有树,而是有循环的图。
解
当您配置构建路径时,不要输入依赖项目(“项目”选项卡),而是转到“库”选项卡。 单击“添加类文件夹...”按钮(假设您引用的项目在您的工作空间中),然后选择类文件夹。 我的是\目标。 选择它作为库文件夹。 在项目A中执行此操作以引用项目B。在项目B中执行此操作以引用项目A。请确保您未引用\ target \ projectNameFolder或没有匹配的导入。 现在,您不必删除依赖关系然后重新设置依赖关系即可强制重建。
使用类库而不是项目引用。
Ryan Zoerner answered 2020-06-18T13:24:06Z
2 votes
有时标记为警告
Windows->首选项-> Java->编译器->构建->循环依赖
不能解决问题,因为eclipse不会编译在未编译的依赖项中具有另一个项目的项目。
因此,要解决此问题,您可以尝试强制Eclipse编译它能够执行的每个类。
为了做到这一点:
取消选择
Windows->首选项-> Java->编译器->构建->发生构建路径错误时中止构建
清理并重建所有项目
项目->清洁...
重新选择:
Windows->首选项-> Java->编译器->构建->发生构建路径错误时中止构建
如果您选择了“自动构建”,则每次更改代码时都不需要这样做
Sambuccid answered 2020-06-18T13:25:14Z
1 votes
如果Maven检测到周期,它将使构建失败,因为依赖项必须是一棵树。
您可能会发现manifest.mf中还有其他声明,而不是pom.xml中定义的声明。 任何额外的声明都可能会引入一个对于Maven而言并不明显的循环。
Rich Seller answered 2020-06-18T13:25:39Z
1 votes
除了Require-Bundle形式的依赖性管理(与Maven的pom依赖性最相似)之外,还可能具有Import-Package依赖性。 用Import-Package引入循环依赖要比Require-Bundle(但需要YMMV)要容易得多。
另外,Eclipse项目有一个“项目引用”,其中指出了它依赖于哪些其他项目。 Eclipse在高层使用它来决定要构建的项目以及构建的顺序,因此您的Manifest.MF很可能正确列出了所有内容,但项目引用却毫无用处。 右键单击一个项目,然后转到属性-您将看到您依赖的项目。 如果您是文本类型的人,请打开.project文件,然后查看其中依赖的文件-很有可能是在该级别定义了项目循环链接(通常是由于您具有AB依赖项,然后 从BA翻转而未更新.project引用)。
AlBlue answered 2020-06-18T13:26:04Z
1 votes
不久前,我遇到了类似的问题,因此决定编写Eclipse插件,以显示Java项目的完整构建路径依赖关系树(尽管不是以图形方式-结果已写入文件中)。 该插件的来源在这里[http://github.com/PetrGlad/dependency-tree]
Petr Gladkikh answered 2020-06-18T13:26:24Z
0 votes
当我遇到这些问题时,Manifest.mf中表达的依赖关系始终是一个真实的循环
因此,打开相关项目的清单,在“依赖项”选项卡上,查看“必需的插件”条目。 然后从那里继续进行下一个项目,并最终重复进行,整个过程将变得清晰起来。
您可以使用“依赖关系”选项卡右下角的“依赖关系分析”链接来简化此任务,它具有循环检测功能和更容易的导航依赖性。
我也不知道为什么Maven更宽容,
djna answered 2020-06-18T13:26:58Z
0 votes
尝试删除引用并将其重新添加,有时eclipse的行为很怪异,因为直到并且除非您修复了该错误,否则它无法刷新。 所以尝试删除所有依赖项项目并将其重新添加清理并建造
sjchoudary answered 2020-06-18T13:27:18Z
0 votes
只需重新启动Eclipse即可解决我项目中的问题
user3235783 answered 2020-06-18T13:27:38Z
0 votes
尽管“标记循环依赖关系”使您可以编译代码,但它可能会导致环境变慢以及将来出现问题。
之所以会这样,是因为Eclipse在某些时候已经失去了它在构建路径上的指示。
1-从工作区中删除项目及其引用。2-再次将其导入。3-检查参考。
这是最好的解决方案。
Machado answered 2020-06-18T13:28:11Z
0 votes
我今天也遇到了同样的问题。 该错误是恰当的。 错误地,我添加了循环依赖。 A依赖于B。在我的情况下,错误地,除了将B作为依赖项添加到A。我也添加了A作为依赖项到B。 这是一个愚蠢的错误。
MansoorShaikh answered 2020-06-18T13:28:31Z
0 votes
我也有这个问题。我只是禁用了工作区分辨率,然后一切正常。在这里输入图像描述
Rain answered 2020-06-18T13:28:51Z
0 votes
当您有多个以JAR形式包含彼此的项目时,可能会发生这种情况。我所做的就是删除所有项目的所有库和对buildpath的项目依赖。 然后,一次将一个项目依赖项添加到“项目”选项卡上,但仅添加需要的项目。这是因为您可以添加一个具有自身引用的项目,或者添加另一个具有此自引用问题的其他项目的项目。
这解决了我的问题。
Camilo answered 2020-06-18T13:29:16Z