【问题标题】:How to do post-build modifications in an Eclipse builder如何在 Eclipse 构建器中进行构建后修改
【发布时间】:2011-09-11 05:29:30
【问题描述】:

我目前正在开发一个 Eclipse 插件来提供 iPOJO 操作支持。 iPOJO的原理是修改Java编译器生成的.class文件,注入一些方法,在Manifest.mf文件中增加/更新一个入口。

目前,我的插件提供了一个项目 Nature 并添加了一个 Builder,添加在项目构建器列表的末尾,它调用 iPOJO Manipulator。 我在 PDE 项目中使用它。

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

当我的构建器完成其工作(和构建过程)后,整个构建过程重新启动,擦除输出文件夹并再次调用我的构建器。 如果我不添加安全技巧,它会使构建过程一遍又一遍地循环。

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

需要明确的是,我正在寻找一种在 PDE 构建后修改类文件的方法,而不会引发新的构建,也不会禁用工作区自动构建属性。

感谢您的回答。

【问题讨论】:

    标签: eclipse-plugin


    【解决方案1】:

    我有点不清楚你在描述什么。

    您提到您希望这适用于 PDE 构建,但 PDE 构建主要发生在使用 ant 脚本的工作区之外。它们不使用 IResource、Builder 或 IResourceDeltaEvent。

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

    一般来说,Eclipse(尤其是 JDT)期望它可以完全控制输出文件夹。但是,在 Preferences -> Java -> Building -> Output Folder 中有一个选项叫做“Rebuild class files generated by others”。确保禁用此功能。 Eclipse 不应该尝试重建您接触的类文件。如果您的构建器仅涉及类文件,那么它在更改类文件后不会触发其他构建。唯一的事情是你需要小心不要编译两次(我认为这是你描述的问题)。

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

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

    【讨论】:

    • 感谢您的回答:我的问题是在某些已编译项目上切换的“重建类...”选项。我暂时保留了 Builder 模型,但 CompilationParticipant 似乎很有趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多