Eclipse plugin 如何在Eclipse构建器中进行构建后修改

Eclipse plugin 如何在Eclipse构建器中进行构建后修改,eclipse-plugin,Eclipse Plugin,我目前正在使用一个Eclipse插件来提供iPOJO操作支持。 iPOJO的原理是修改Java编译器生成的.class文件,以注入一些方法,并向Manifest.mf文件添加/更新条目 目前,我的插件提供了一个项目性质,并添加了一个生成器,添加在项目生成器列表的末尾,该生成器调用iPOJO操纵器。 我在PDE项目中使用它 整个过程正常,但我有一个问题: 当我的构建器完成了它的工作(以及构建过程)后,整个构建过程重新启动,删除输出文件夹,然后再次调用MyBuilder。 如果我不添加一个安全技巧,

我目前正在使用一个Eclipse插件来提供iPOJO操作支持。 iPOJO的原理是修改Java编译器生成的.class文件,以注入一些方法,并向Manifest.mf文件添加/更新条目

目前,我的插件提供了一个项目性质,并添加了一个生成器,添加在项目生成器列表的末尾,该生成器调用iPOJO操纵器。 我在PDE项目中使用它

整个过程正常,但我有一个问题:

当我的构建器完成了它的工作(以及构建过程)后,整个构建过程重新启动,删除输出文件夹,然后再次调用MyBuilder。 如果我不添加一个安全技巧,它会使构建过程反复循环

在我使用IResource时,必须在构建过程结束时发送IResourceDeltaEvent,因此我认为避免此类问题的最佳方法是隐藏资源已更改的事实

明确地说,我正在寻找一种在PDE构建之后修改类文件的方法,而不需要引入新的构建,也不需要禁用workspace auto build属性


谢谢你的回答。

我不太清楚你在描述什么

您提到您希望这对PDE构建起作用,但是PDE构建主要在工作区之外使用ant脚本进行。它们不使用IResource、Builder或IResourceDeltaEvent

我猜你不是指PDE构建,而是指在工作区内构建插件项目

一般来说,Eclipse(特别是JDT)希望它能够完全控制输出文件夹。但是,在Preferences->Java->Building->Output文件夹中有一个名为“重建由其他人生成的类文件”的选项。确保已禁用此选项。Eclipse不应该尝试重建您所接触的类文件。如果构建器仅接触类文件,则在更改类文件后不会触发其他构建。唯一的问题是,您需要小心不要编译两次(我认为这就是您描述的问题)

或者,实现CompilationParticipant(以及org.eclipse.jdt.core.CompilationParticipant扩展点)可能更容易。这将允许您确切地知道JDT何时调用编译以及它编译的内容


此外,还将通知您协调操作(即未保存的工作副本中的更改)。如果您想在键入时操作文件,这可能会很有用。

谢谢您的回答:我的问题是“重建类…”选项,该选项在一些编译的项目中切换。我暂时保留了Builder模型,但是CompilationParticipant似乎很有趣。