0

我正在尝试使用 Eclipse PDE 工具将一组插件(最终是 OSGi 包)编译成一个功能。我有一个基于 Spring 框架的自定义目标平台。

当我通过 Eclipse 的导出向导导出功能时,功能构建成功,但是,当我尝试从 feature.xml 文件生成 Ant 构建脚本时,我收到关于“循环”的错误。在做了一些研究之后,我发现导出向导中有一个“允许目标平台中的二进制循环”复选框——取消选中它会产生与我在尝试使用 PDE 工具生成 Ant 构建文件时看到的相同的结果。

我尝试从导出向导保存 Ant 构建文件,但是当我执行 Ant 构建文件时,我收到相同的错误,表明存在循环(并且它引用了目标平台捆绑包)。

此外,我尝试在 build.properties 文件中设置“allowBinaryCycles = true”,也尝试将其设置为 Ant Build 脚本中的一个属性——两者均不影响结果。

如何从导出向导运行生成的 Ant 构建文件,以便在目标平台中允许二进制循环?

编辑:需要明确的是,这里的错误存在于目标平台中(即:Spring 框架!)。事实证明,Spring Framework 中的 Context 和 ORM 包之间存在一个循环。这有点烦人,并且存在两种体面的解决方法:

  1. 如果不需要,请排除 ORM 包(事实证明这是我最好的解决方案)
  2. 从 ORM 包中移除对 Context 包的动态依赖。

Spring 论坛上的一些讨论有助于解决这个问题。

当然,这些解决方案是 Spring 特有的。似乎还有第二个问题——这次是 Eclipse 作为构建器——允许这些二进制循环的选项(无论它们可能多么错误和糟糕)只存在于构建器的 GUI 版本中。人们希望最终这个选项能够进入 Ant 构建任务。

4

2 回答 2

1

解决它通常很痛苦,但循环是一种代码味道,如果可能的话,你应该删除它们而不是解决它们。从长远来看,您将节省精力。

一个 hacky 解决方法是从插件的依赖项构建一个复合类路径,然后一次性编译所有类。将生成的类添加到路径并依次构建每个插件。

于 2009-09-25T15:59:04.453 回答
0

事实证明,Spring Framework 中的 Context 和 ORM 包之间存在一个循环。这有点烦人,并且存在两种体面的解决方法:

  1. 如果不需要,请排除 ORM 包(事实证明这是我最好的解决方案)
  2. 从 ORM 包中移除对 Context 包的动态依赖。

Spring 论坛上的一些讨论有助于解决这个问题。

当然,这些解决方案是 Spring 特有的。似乎还有第二个问题——这次是 Eclipse 作为构建器——允许这些二进制循环的选项(无论它们可能多么错误和糟糕)只存在于构建器的 GUI 版本中。人们希望最终这个选项能够进入 Ant 构建任务。

于 2009-09-29T18:17:27.247 回答