6

我想为 Eclipse 创建一个 Google Closure Compiler 插件。我已经有一个弹出菜单项来将 JavaScript 文件编译为其缩小版本。但是,如果每次保存时*.js都会自动生成该缩小版本,那将非常有帮助。我读过/听说过自然和建设者、扩展点和IResourceChangeListener. 但我没有弄清楚我应该使用什么,尤其是如何让它工作。

是否有一个插件的工作示例可以执行“相同类型的事情”,这样我就可以使用它或编写这样的教程?

通过下面的答案,我搜索了使用IResourceChangeListener并提出了以下代码的项目:

清单:http ://codepaste.net/3yahwe

plugin.xmlhttp ://codepaste.net/qek3rw

激活器:http ://codepaste.net/s7xowm

虚拟启动: http ://codepaste.net/rkub82

MinifiedJavascriptUpdater:http ://codepaste.net/koweuh

其中MinifiedJavascriptUpdater.java包含函数的代码永远不会到达IResourceChangeListenerresourceChanged()

4

2 回答 2

5

从这里回答http://www.eclipse.org/forums/index.php/t/362425/

解决方案是将代码放入激活器并摆脱MinifiedJavascriptUpdater

package closure_compiler_save;

import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

/**
 * The activator class controls the plug-in life cycle
 */
public class Activator extends AbstractUIPlugin {

    // The plug-in ID
    public static final String PLUGIN_ID = "closure-compiler-save"; //$NON-NLS-1$

    // The shared instance
    private static Activator plugin;

    /**
     * The constructor
     */
    public Activator() {
    } //gets here

    @Override
    public void start(BundleContext context) throws Exception {
        super.start(context);
        Activator.plugin = this;

        ResourcesPlugin.getWorkspace().addResourceChangeListener(new IResourceChangeListener() {
            public void resourceChanged(IResourceChangeEvent event) {
                System.out.println("Something changed!");
            }
        });
    }

    @Override
    public void stop(BundleContext context) throws Exception {
        Activator.plugin = null;
        super.stop(context);
    }

    /**
     * Returns the shared instance
     *
     * @return the shared instance
     */
    public static Activator getDefault() {
        return plugin;
    }
}
于 2012-06-18T09:28:25.380 回答
1

你需要一个建造者来做这件事。Eclipse 为您想要做的事情提供了广泛的支持,即随着事情的变化需要维护生成的工件的概念。这篇论文将帮助您入门(尽管它非常古老,但它是完全准确的)。

所有语言插件(JDT、CDT 等)在编译代码时都会做这种事情。

于 2012-06-01T14:06:44.120 回答