通过IPluginContentWizard界面创建插件项目时,将eclipse插件设置为单例

时间:2018-10-26 10:08:18

标签: eclipse plugins wizard eclipse-pde

我正在开发一个实现org.eclipse.pde.ui.IPluginContentWizard界面的向导。因此,它会在插件项目向导的末尾作为插件项目模板添加。所有文件都会被创建好,但是项目中有一个错误。插件未声明为扩展扩展点时必须为单例。

如何在向导中执行此操作?我认为这需要在performFinish(IProject项目,IPluginModelBase模型,IProgressMonitor监视器)中完成,但是无论是项目还是模型都没有提供这样做的可能性。

编辑:对于将来的读者:我的错误是,我不是通过API添加扩展名,而是通过“手动”生成plugin.xml。这不会在后台引起任何机制来完成其工作,因此未设置singleton指令。

2 个答案:

答案 0 :(得分:0)

这种方式将太长,让我们使用更多的PDE API:

首先,定义模板部分

import org.eclipse.pde.ui.templates.OptionTemplateSection;

public class YourTemplateSection extends OptionTemplateSection {

    //implement abstract methods according your needs

    @Override
    protected void updateModel(IProgressMonitor monitor) throws CoreException {
        IPluginBase plugin = model.getPluginBase();

        //do what is needed

        plugin.add(extension);//here the "singleton" directive will be set

    }
}

然后在向导中使用该部分

import org.eclipse.pde.ui.templates.ITemplateSection;
import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;

public class YourContentWizard extends NewPluginTemplateWizard {

    @Override
    public ITemplateSection[] createTemplateSections() {
        return new ITemplateSection[] { new YourTemplateSection() };
    }

}

答案 1 :(得分:0)

万一我又犯了同样的菜鸟错误,我想发布我稍后重新访问该项目后提出的解决方案:

不要手动创建plugin.xml,请使用插件模型的PDE API添加扩展。

org.eclipse.pde.ui.IPluginContentWizard实现的performFinish(...)方法中,执行以下操作:

try {
    IPluginExtension extension = model.getExtensions().getModel().getFactory().createExtension();
    extension.setPoint("org.eclipse.elk.core.layoutProviders");
    IPluginElement provider = model.getPluginFactory().createElement(extension);
    provider.setName("provider");
    provider.setAttribute("class", id + "." + algorithmName + "MetadataProvider");
            extension.add(provider);
    model.getExtensions().add(extension);
} catch (CoreException e) {
    e.printStackTrace();
}