idea插件怎么创建自己的项目向导?背景 最近要开发一个基于idea插件的项目脚手架插件,市面上其实有很多类似的插件,但
背景
最近要开发一个基于idea插件的项目脚手架插件,市面上其实有很多类似的插件,但为了后续更多的定制化,所以还是考虑自己在搞一套。
大概的思路就是在idea的项目向导页面,新增一个tap,自定义路径,然后生成项目模板。
实践
要实现自定义项目向导,需要重写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 (SaaSModuleType) ModuleTypeManager.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