likes
comments
collection
share

idea插件怎么创建自己的项目向导?背景 最近要开发一个基于idea插件的项目脚手架插件,市面上其实有很多类似的插件,但

作者站长头像
站长
· 阅读数 22

背景

最近要开发一个基于idea插件的项目脚手架插件,市面上其实有很多类似的插件,但为了后续更多的定制化,所以还是考虑自己在搞一套。

大概的思路就是在idea的项目向导页面,新增一个tap,自定义路径,然后生成项目模板。

idea插件怎么创建自己的项目向导?背景 最近要开发一个基于idea插件的项目脚手架插件,市面上其实有很多类似的插件,但

实践

要实现自定义项目向导,需要重写ModuleBuilder,ModuleType,SaaSModuleWizardStep

ModuleBuilder

首先需要先继承ModuleBuilder,主要是用来定义你这个向导的步骤和窗体展现

public class SaaSModuleBuilder extends ModuleBuilder {

  @Override
  public void setupRootModel(@NotNull ModifiableRootModel model) {
  }

  @Override
  public SaaSModuleType getModuleType() {
    return SaaSModuleType.getInstance();
  }

  @Override
  public @Nullable ModuleWizardStep getCustomOptionsStep(WizardContext context, Disposable parentDisposable) {
    return new SaaSModuleWizardStep();
  }
}

主要重写getModuleType,getCustomOptionsStep,这两个方法,一个是用来定义向导tap页样式,一个是控制窗体的展示。为了实现这两个效果,所以我们还需要继承ModuleType,ModuleWizardStep

ModuleType

public class SaaSModuleType extends ModuleType<SaaSModuleBuilder> {

  private static final String ID = "SAAS_MODULE_TYPE";

  public SaaSModuleType() {
    super(ID);
  }

  public static SaaSModuleType getInstance() {
    return (SaaSModuleTypeModuleTypeManager.getInstance().findByID(ID);
  }

  @NotNull
  @Override
  public SaaSModuleBuilder createModuleBuilder() {
    return new SaaSModuleBuilder();
  }

  @NotNull
  @Override
  public String getName() {
    return "Saas脚手架";
  }

  @NotNull
  @Override
  public String getDescription() {
    return "Example custom module type";
  }

  @NotNull
  @Override
  public Icon getNodeIcon(@Deprecated boolean b) {
    return SdkIcons.Sdk_default_icon;
  }
}

首先需要定义一个唯一的id,用来实例化SaaSModuleType,同时要注册到plugin.xml中

    <extensions defaultExtensionNs="com.intellij">
        <moduleType id="DEMO_MODULE_TYPE" implementationClass="com.example.saasprojectscaffolding.module.SaaSModuleType"/>
    </extensions>

重写其他方法,用来定义名称,描述和logo

ModuleWizardStep

public class SaaSModuleWizardStep extends ModuleWizardStep {

  @Override
  public JComponent getComponent() {
    return new ScaffoldingWindows().getPanel();
  }
}

主要是重写getComponent,用来显示窗体的样式

总结

定义一个新的项目向导,主要是要继承ModuleBuilder,定义对应的tap样式和窗体样式 可以通过重写getCustomOptionsStep或者createWizardSteps定义一个或多个步骤,用来实现窗体翻页的效果

  @Override
  public ModuleWizardStep[] createWizardSteps(@NotNull WizardContext wizardContext, @NotNull ModulesProvider modulesProvider) {
    return super.createWizardSteps(wizardContext, modulesProvider);
  }

  @Override
  public @Nullable ModuleWizardStep getCustomOptionsStep(WizardContext context, Disposable parentDisposable) {
    return new SaaSModuleWizardStep();
  }

同时还可以getIgnoredSteps去过滤idea内置的步骤

  @Override
  public @NotNull List<Class<? extends ModuleWizardStep>> getIgnoredSteps() {
    List<Class<? extends ModuleWizardStep>> ignoredSteps = new ArrayList<>();
    ignoredSteps.add(ProjectTypeStep.class);
    ignoredSteps.add(ProjectSettingsStep.class);
    return ignoredSteps;
  }
转载自:https://juejin.cn/post/7403659734257238027
评论
请登录