java项目中改依赖库路径_java-在项目xxx的构建路径中检测到一个周期-构建路径问题...

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值