我目前正在使用Eclipse插件来提供iPOJO操作支持。 iPOJO的原理是修改Java编译器生成的.class文件,以注入一些方法并添加/更新Manifest.mf文件的条目。
目前,我的插件提供了一个项目Nature,并在项目构建器列表的末尾添加了一个调用iPOJO Manipulator的Builder。 我在PDE项目中使用它。
完整的过程有效,但我遇到了问题:
当我的构建器完成其作业(以及构建过程)时,整个构建过程将重新启动,删除输出文件夹并再次调用构建器。 如果我不添加安全技巧,它会使构建过程一遍又一遍地循环。
当我处理IResource时,必须在构建过程结束时发送IResourceDeltaEvent,因此我认为避免此类问题的最佳方法是隐藏资源已更改的事实。
要清楚,我正在寻找一种在PDE构建之后修改类文件的方法,而不会导致新的构建,也不会禁用工作区自动构建属性。
感谢您的回答。
答案 0 :(得分:1)
我对你所描述的内容有点不清楚。
您提到您希望这适用于PDE构建,但PDE构建主要在使用ant脚本的工作区之外发生。它们不使用IResource,Builder或IResourceDeltaEvent。
我猜你并不是指PDE构建,而是在工作区内构建插件项目。
通常,Eclipse(特别是JDT)希望它可以完全控制输出文件夹。但是,首选项中有一个选项 - > Java - >建筑 - >输出文件夹名为“重建其他人生成的类文件”。确保禁用此功能。 Eclipse不应该尝试重建您触摸的类文件。如果构建器仅触及类文件,则在更改类文件后不会触发其他构建。唯一的问题是你需要注意不要两次编译(我认为这是你所描述的问题)。
或者,您可能更容易实现CompilationParticipant(以及org.eclipse.jdt.core.compilationParticipant扩展点)。这将使您能够准确了解JDT何时调用编译以及编译它的确切内容。
此外,您将收到有关协调操作的通知(即 - 尚未保存的工作副本的更改)。如果您想按照自己的方式操作文件,这可能对您有用。