由于二进制循环导致Eclipse PDE Ant构建脚本生成失败

时间:2009-09-25 14:59:57

标签: spring ant eclipse-pde

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

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

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

此外,我已经尝试在build.properties文件中设置“allowBinaryCycles = true”,也作为Ant Build脚本的属性设置 - 既不会影响结果。

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

编辑: 为了清楚起见,这里的错误存在于目标平台中(即:Spring框架!)。事实证明,Context和ORM bundle之间存在一个循环。这有点令人讨厌,并且存在两个不错的解决方法:

  1. 如果不需要,请排除ORM捆绑包(原来这是我最好的解决方案)
  2. 从ORM包中删除Context捆绑包的动态依赖关系。
  3. 关于Spring Forums的一些讨论有助于解决这个问题。

    当然,这些解决方案特别适用于Spring。似乎存在第二个问题 - 这次是Eclipse作为构建器 - 允许这些二进制周期(但是它们可能是错误的和可怕的)的选项仅存在于构建器的GUI版本中。人们希望最终这个选项能够进入Ant构建任务。

2 个答案:

答案 0 :(得分:1)

解决这个问题通常很痛苦,但周期是代码气味,如果可能的话你应该删除它们而不是围绕它们工作。从长远来看,你会省力。

一个hacky解决方法是从插件的依赖项构建一个composite classpath,然后一次编译所有类。将结果类添加到路径中并依次构建每个插件。

答案 1 :(得分:0)

事实证明,Context和ORM bundle之间存在一个循环。这有点令人讨厌,并且存在两个不错的解决方法:

  1. 如果不需要,请排除ORM捆绑包(原来这是我最好的解决方案)
  2. 从ORM包中删除Context捆绑包的动态依赖关系。
  3. 关于Spring Forums的一些讨论有助于解决这个问题。

    当然,这些解决方案特别适用于Spring。似乎存在第二个问题 - 这次是Eclipse作为构建器 - 允许这些二进制周期(但是它们可能是错误的和可怕的)的选项仅存在于构建器的GUI版本中。人们希望最终这个选项能够进入Ant构建任务。