2011-09-08 44 views
0

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

目前,我的插件提供了一个项目“自然”,并添加了一个Builder,添加到项目生成器列表的末尾,调用iPOJO Manipulator。 我在PDE项目中使用它。

的完整过程的作品,但我有一个问题:

当我的建设者已经完成它的任务(和建设过程中),在整个建设过程中重新启动,清除输出文件夹,再打电话给我的建设者。 如果我不添加安全技巧,它会让构建过程一遍又一遍地循环。

当我在IResource上工作时,IResourceDeltaEvent必须在构建过程结束时发送,所以我认为避免这种问题的最好方法是隐藏资源已经改变的事实。

为了清楚起见,我正在寻找一种在PDE构建之后修改类文件的方式,而不会引发新构建,也不会禁用工作区自动构建属性。

感谢您的回答。

回答

1

我对你所描述的有点不清楚。

您提到您希望这适用于PDE构建,但PDE构建基本上在使用ant脚本的工作空间之外发生。他们不使用IResource,Builder或IResourceDeltaEvent。

我在猜测你并不是指PDE构建,而是在工作空间内建立插件项目。

通常,Eclipse(特别是JDT)期望它可以完全控制输出文件夹。但是,在首选项 - > Java - >构建 - >输出文件夹中有一个名为“重建其他人生成的类文件”的选项。确保这是禁用的。 Eclipse不应该尝试重建您触摸的类文件。如果您的构建器只涉及类文件,那么它在更改类文件后不会触发其他构建。唯一的是你需要小心,不要两次编译东西(我认为这是你所描述的问题)。

或者,您可能更容易实现CompilationParticipant(和org.eclipse.jdt.core.compilationParticipant扩展点)。这将使您能够准确知道JDT何时调用编译以及编译的内容。

此外,您将收到协调操作的通知(即未更改的工作副本)。如果你想操作文件,你可能会对你很有用。

+0

感谢您的回答:我的问题是“重建类...”选项已被切换到一些已编译的项目上。 我暂时保存了Builder模型,但是CompilationParticipant看起来很有趣。 –